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.
composer require laminas/laminas-translatoren_US.php or messages.mo) — a simple associative array of msgid => msgstr pairs works for PHP arrays; gettext .mo/.po files are also supported.use Laminas\Translator\Translator;
use Laminas\Translator\Adapter\PhpArray;
$translator = new Translator(new PhpArray(['locale' => 'en_US', 'directory' => __DIR__ . '/languages', 'pattern' => '/^%s\.php$/']));
echo $translator->translate('Hello world'); // Outputs: Hello world (or translated version)
$locale = $_SESSION['user_locale'] ?? 'en_US';
$translator->setLocale($locale);
Translator as a shared service. Inject it into services, controllers, or view helpers.errors, forms, emails) to avoid collisions:
$translator->translate('Invalid email', 'errors');
translatePlural() with count:
echo $translator->translatePlural('%d apple', '%d apples', $count);
$translator->setAdapter(new DatabaseAdapter($db));
Translator service for use in .phtml files:
<?= $this->translate('Save changes') ?>
en_US, fr_FR) instead of partial codes — adapter behavior varies (e.g., gettext relies on OS locale support).Laminas\Translator\Adapter\gettext + Laminas\Translator\Translator::setCache() (e.g., File or Apcu) to avoid parsing catalogs on every request.Laminas\Locale\Locale or middleware).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.Laminas\Translator\Adapter\AdapterInterface to support custom sources (e.g., JSON, API-based translations).MessageKeys::WELCOME_MESSAGE) to prevent breakage on typo.How can I help you explore Laravel packages today?