dev-master
9999999-devA library for simple i18n management in PHP
The Requires
The Development Requires
0.1.0
0.1.0.0A library for simple i18n management in PHP
The Requires
The Development Requires
Wallogit.com
2017 © Pedro Peláez
A library for simple i18n management in PHP
A library for simple i18n management in PHP., (*1)
Include openclerk/i18n as a requirement in your project composer.json,
and run composer update to install it into your project:, (*2)
{
"require": {
"openclerk/i18n": "dev-master"
}
}
TODO, (*3)
I18n::addAvailableLocale(new FrenchLocale()); // implement your own Locale here
I18n::setLocale('fr');
echo t("hello"); // returns 'bonjour'
echo I18n::getCurrentLocale(); // returns 'fr'
You can also listen to the i18n_missing_string event (with openclerk/events)
to capture missing locale strings at runtime:, (*4)
\Openclerk\Events::on('i18n_missing_string', function($data) {
echo $data['locale'] . ": " . $data['key'];
});
echo t("missing string"); // prints "fr: missing string"
One easy way to implement a Locale is simply to define it in a JSON file:, (*5)
class FrenchLocale implements \Openclerk\Locale {
function getKey() {
return 'fr';
}
function getTitle() {
return 'French' /* i18n */;
}
function load() {
$json = json_decode(__DIR__ . "/fr.json", true /* assoc */);
return $json;
}
}
For speed, you could also define this as a PHP file require() instead., (*6)
By using component-discovery along with translation-discovery, you can combine translation files across multiple projects and Composer dependencies at build time. For example:, (*7)
abstract class DiscoveredLocale implements \Openclerk\Locale {
function __construct($code, $file) {
$this->code = $code;
$this->file = $file;
}
function getKey() {
return $this->code;
}
function load() {
if (!file_exists($this->file)) {
throw new \Openclerk\LocaleException("Could not find locale file for '" . $this->file . "'");
}
$result = array();
require($this->file);
return $result;
}
}
class FrenchLocale extends DiscoveredLocale {
public function __construct() {
parent::__construct('fr', __DIR__ . "/../site/generated/translations/fr.php");
}
}
\Openclerk\I18n::addAvailableLocales(DiscoveredComponents\Locales::getAllInstances());
(TODO: Add link to example project), (*8)
When changing user locale, add a cookie:, (*9)
setcookie('locale', $locale, time() + (60 * 60 * 24 * 365 * 10) /* 10 years in the future */);
And then check for this cookie as necessary:, (*10)
if (isset($_COOKIE["locale"]) && in_array($_COOKIE["locale"], array_keys(I18n::getAvailableLocales()))) {
I18n::setLocale($_COOKIE["locale"]);
}
The soundasleep/translation-discovery project
has a find script that can be used to search your project for translation strings that may need to
be translated across all of your components., (*11)
This script will find all instances of the following translation strings, and output them to
the template JSON folder:, (*12)
t("string")ht("string")plural("string", 1) and plural("string", "strings", 1)
"string" /* i18n */A library for simple i18n management in PHP
A library for simple i18n management in PHP