composer require initphp/translatorRequires PHP 8.1 or newer. There are no runtime dependencies.
A translator needs three things before you can read a translation:
- A base directory that holds the language packs —
setDir(). - A layout mode —
useFile()(default) oruseDirectory(). - A default language —
setDefault(), which also loads it.
use InitPHP\Translator\Translator;
$lang = new Translator();
$lang->useFile() // optional; file mode is the default
->setDir(__DIR__ . '/languages/') // where the language packs live
->setDefault('en'); // load 'en' and make it activeEvery configuration method returns the same instance, so the calls chain.
Order matters. Pick the layout mode before a language is loaded (before
setDefault()/change()), and callsetDir()before either. Changing the mode after a language has loaded throws aTranslatorException.
A language file is a plain PHP file that returns an associative array:
<?php
// languages/en.php
return [
'hello' => 'Hello',
'welcome' => 'Welcome {user}',
];echo $lang->translate('hello'); // "Hello"
echo $lang->translate('welcome', null, ['user' => 'Ada']); // "Welcome Ada"translate() returns a string. To echo it directly, use render():
$lang->render('welcome', null, ['user' => 'Ada']); // prints "Welcome Ada"change() sets the active language, loading it the first time it is used:
$lang->change('tr');
echo $lang->translate('hello'); // value from tr.phpIf a key is missing in the active language, the translator falls back to the default language (see Key resolution & fallback).
require 'vendor/autoload.php';
use InitPHP\Translator\Translator;
$lang = new Translator();
$lang->setDir(__DIR__ . '/languages/')
->setDefault('en');
// Later, per request:
$lang->change($_GET['lang'] ?? 'en');
echo $lang->translate('welcome', 'Welcome {user}', [
'user' => 'Ada',
]);Next: choose your layout — File mode or Directory mode.