transitive/translate

Translations…

Maintainers

Package info

github.com/RobinDumontChaponet/TransitiveTranslate

pkg:composer/transitive/translate

Statistics

Installs: 6

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-05-20 16:41 UTC

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, and ArrayAccess.
  • 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 .mo files 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';

License

MIT