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
$langlink to thistarget language: en-us, es-es, zh-cn, etc
string(5) "en-us"
string
$sourcelink to thissource language: en-us, es-es, zh-cn, etc
string(5) "en-us"
array
$_cachelink to thiscache 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
;
}