У меня есть функция L($key)
которая переводит мои строки.
Ничего особенного:
$_langs = include(__DIR__ . '/lang.php');
function L($key)
{
global $_langs;
if (array_key_exists($key, $_langs)) {
return $_langs[$key];
} else {
return $key;
}
}
Когда мне нужен параметризованный перевод (с %s
), я использую это:
sprintf(L('myKey'), $var)
Есть ли простой способ сделать это, поэтому я могу использовать только L('myKey', $var)
?
Я думал о добавлении array $params=null
в качестве формального параметра (тогда он принимает массив как второй аргумент), но как я могу затем расширить его до отдельных аргументов sprintf()
?
Как обычно, я понял это сразу после запроса ^^
Здесь мое решение - если вы можете написать его лучше, не стесняйтесь отвечать, и я могу его принять.
// i18n utility
$_langs = include(__DIR__ . '/lang.php');
function L($key)
{
global $_langs;
if (array_key_exists($key, $_langs)) {
$formats = array_slice(func_get_args(), 1);
$sprintf_args = array_merge([$_langs[$key]], $formats);
return call_user_func_array('sprintf', $sprintf_args);
} else {
return $key;
}
}
L( 'myKey', array('varname1'=>$var1, 'varname2' =>$var2)
. Не уверен, что это проще.