transitive / translate
Translations…
dev-main
2026-05-20 16:41 UTC
Requires
- php: >8.1
- ext-intl: *
Requires (Dev)
- phpunit/phpunit: ^9.0.0
- vimeo/psalm: ^6.12
This package is auto-updated.
Last update: 2026-05-20 16:43:57 UTC
README
Translation layer for the Transitive MVP stack… or not.
This package keeps natural source strings in application code and delegates catalogue lookup to interchangeable backends.
What is included
Transitive\Translate\Translator: public translation API, locale fallback, domains, contexts, replacements, ICU formatting,__invoke, andArrayAccess.Transitive\Translate\TranslationBackend: lookup contract implemented by all storage backends.Transitive\Translate\PhpArrayBackend: loads external PHP catalogue files.Transitive\Translate\ResourceBundleBackend: loads ICU resource bundles from external locale directories.Transitive\Translate\GettextBackend: reads.mofiles directly without relying on gettext process globals.
Installation
composer require transitive/translate
PHP 8.1+ and ext-intl are required.
Basic usage
<?php use Transitive\Translate\PhpArrayBackend; use Transitive\Translate\Translator; $translator = new Translator( locale: 'fr_FR', fallbackLocale: 'en', backend: new PhpArrayBackend(__DIR__.'/locales'), ); echo $translator['Save']; echo $translator->get('The artwork "{title}" was returned.', ['title' => $title]); echo $translator->get('Editor', context: 'artwork'); echo $translator->get('Late loans', domain: 'loans'); Translator::setShared($translator); echo Translator::get('Save');
PHP array catalogues
locales/
fr_FR/
app.php
loans.php
<?php return [ 'Save' => 'Enregistrer', "artwork\x04Editor" => 'Editeur', ];
ICU formatting
echo $translator->get( 'There {count, plural, one {is # late loan} other {are # late loans}}.', ['count' => 3], );
PHAR deployment
Keep translation resources outside the PHAR:
/app/app.phar
/app/locales/
$basePath = dirname(Phar::running(false)).'/locales';