PHP I18n is a simple library for storing localized strings outside of your code.
Add the following require to your composer.json file.
{
"require": {
"teacup/borges": "1.*"
}
}
In order to use i18n, you will need a language folder. By convention this folder is config/locales
, however, you can choose whichever you want. In this folder, each supported language requires its own folder (config/locales/en
, config/locales/de
, ...).
You will most likely be using the I18n class in your own implementation, so you are just given a class which you can write a wrapper class for in your own code. All you need to do to create this class is give it the path to the language folder you decided on before.
<?php
use Teacup\I18n\I18n as Lang;
$lang = new Lang( dirname(__FILE__) . '/config/locales' );
Notice: Currently, only yaml files are supported.
For this example, the language folder is at config/locales.
Create a file config/locales/en/example.yml
foo: bar
nested:
foo: bar
var: foo :var
plural:
one: A :color apple
other: :count :color apples
And a dialect file config/locales/en_US/example.yml
foo: murica
Note: Take note of the yml file name as it will be the first part of your key (example.yml => example).
Now we can load the translation class and get our translated string.
<?php
use Teacup\I18n\I18n as Lang;
$lang = new Lang( dirname(__FILE__) . 'config/locales' );
/**
* normal translated string
*
* @param string $locale
* @param string $key
*/
$lang->get( 'en', 'example.foo' ); // returns 'bar'
/**
* nested translated strings
*
* @param string $locale
* @param string $key
*/
$lang->get( 'en', 'example.nested.foo' ); // returns 'bar'
/**
* Variable translated string
*
* @param string $locale
* @param string $key
*/
$lang->get( 'en', 'example.var', ['var' => 'bar']); // returns 'foo bar'
/**
* Plural tranlated strings
*
* @param string $locale
* @param string $key
* @param int $count
*/
$lang->get( 'en', 'example.plural', ['color' => 'red'], 1); // returns 'A red apple'
$lang->get( 'en', 'example.plural', ['color' => 'red'], 2); // returns '2 red apples'
/**
* Dialect translated strings
*/
$lang->get( 'en_US', 'example.foo' ); // returns 'murica'
$lang->get( 'en_US', 'example.nested.foo' ); // returns 'bar' as it falls back to en