Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laminas Translator Laravel Package

laminas/laminas-translator

Laminas Translator provides message translation for PHP apps, supporting multiple locales, pluralization, and translation files like gettext and PHP arrays. Includes adapters, loaders, and integration helpers to localize UI text cleanly across modules.

View on GitHub
Deep Wiki
Context7

Getting Started

  1. Install via Composer: composer require laminas/laminas-translator
  2. Create your first translation catalog (e.g., en_US.php or messages.mo) — a simple associative array of msgid => msgstr pairs works for PHP arrays; gettext .mo/.po files are also supported.
  3. Instantiate the translator with an adapter:
    use Laminas\Translator\Translator;
    use Laminas\Translator\Adapter\PhpArray;
    
    $translator = new Translator(new PhpArray(['locale' => 'en_US', 'directory' => __DIR__ . '/languages', 'pattern' => '/^%s\.php$/']));
    
  4. Translate a message:
    echo $translator->translate('Hello world'); // Outputs: Hello world (or translated version)
    
  5. Detect locale at runtime (common pattern):
    $locale = $_SESSION['user_locale'] ?? 'en_US';
    $translator->setLocale($locale);
    

Implementation Patterns

  • DI Integration: Use Laminas ServiceManager or a custom container to register Translator as a shared service. Inject it into services, controllers, or view helpers.
  • Text Domains: Organize messages by context (e.g., errors, forms, emails) to avoid collisions:
    $translator->translate('Invalid email', 'errors');
    
  • Pluralization: Use translatePlural() with count:
    echo $translator->translatePlural('%d apple', '%d apples', $count);
    
  • Dynamic Adapter Switching: Swap translation sources without code changes — e.g., fall back to database loader in admin panels:
    $translator->setAdapter(new DatabaseAdapter($db));
    
  • View Helper Integration: In Laminas MVC, create a view helper that injects the Translator service for use in .phtml files:
    <?= $this->translate('Save changes') ?>
    

Gotchas and Tips

  • Locale Format Matters: Use full locales (en_US, fr_FR) instead of partial codes — adapter behavior varies (e.g., gettext relies on OS locale support).
  • Caching is Critical: For production, wrap adapters in Laminas\Translator\Adapter\gettext + Laminas\Translator\Translator::setCache() (e.g., File or Apcu) to avoid parsing catalogs on every request.
  • No Auto-Detection: Unlike some i18n libs, this package does not auto-detect locale from headers or Accept-Language — you must implement detection logic (e.g., via Laminas\Locale\Locale or middleware).
  • Adapter-Specific Requirements:
    • gettext: Requires ext-gettext and properly compiled .mo files.
    • Csv: No support for plural forms — avoid for multi-language UIs with count-sensitive messages.
    • PhpArray: Fast and cache-friendly, but edits require cache clear.
  • Extending Adapters: Implement Laminas\Translator\Adapter\AdapterInterface to support custom sources (e.g., JSON, API-based translations).
  • Case Sensitivity: Message IDs are exact-match only — avoid hardcoded strings in templates; use constants or enums (e.g., MessageKeys::WELCOME_MESSAGE) to prevent breakage on typo.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport
twbs/bootstrap4