Internationalization (i18n) class. Provides language loading and translation methods without dependencies on gettext.
Typically this class would never be used directly, but used via the __() function, which loads the message and replaces parameters:
// Display a translated message
echo __('Hello, world');
// With parameter replacement
echo __('Hello, :user', [':user' => $username]);
Class declared in SYSPATH/classes/I18n.php on line 3.
string
$langtarget language: en-us, es-es, zh-cn, etc
string(5) "en-us"
string
$sourcesource language: en-us, es-es, zh-cn, etc
string(5) "en-us"
array
$_cachecache of loaded languages
array(0)
Returns translation of a string. If no translation exists, the original string will be returned. No parameters are replaced.
$hello = I18n::get('Hello friends, my name is :name');
string
$string
required - Text to translate string
$lang
= NULL - Target language string
public static function get($string, $lang = null)
{
if (!$lang) {
// Use the global target language
$lang = I18n::$lang;
}
// Load the translation table for this language
$table = I18n::load($lang);
// Return the translated string if it exists
return isset($table[$string]) ? $table[$string] : $string;
}
Get and set the target language.
// Get the current language
$lang = I18n::lang();
// Change the current language to Spanish
I18n::lang('es-es');
string
$lang
= NULL - New language setting string
public static function lang($lang = null)
{
if ($lang) {
// Normalize the language
I18n::$lang = strtolower(str_replace([' ', '_'], '-', $lang));
}
return I18n::$lang;
}
Returns the translation table for a given language.
// Get all defined Spanish messages
$messages = I18n::load('es-es');
string
$lang
required - Language to load array
public static function load($lang)
{
if (isset(I18n::$_cache[$lang])) {
return I18n::$_cache[$lang];
}
// New translation table
$table = [];
// Split the language: language, region, locale, etc
$parts = explode('-', $lang);
do {
// Create a path for this set of parts
$path = implode(DIRECTORY_SEPARATOR, $parts);
if ($files = Kohana::find_file('i18n', $path, null, true)) {
$t = [];
foreach ($files as $file) {
// Merge the language strings into the sub table
$t = array_merge($t, Kohana::load($file));
}
// Append the sub table, preventing less specific language
// files from overloading more specific files
$table += $t;
}
// Remove the last part
array_pop($parts);
} while ($parts);
// Cache the translation table locally
return I18n::$_cache[$lang] = $table;
}