This class is a transparent base class for I18n and should not be accessed directly.
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/Kohana/I18n.php on line 22.
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;
}