Функция перевода с необязательными аргументами замещения

0

У меня есть функция 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()?

  • 0
    если вы собираетесь использовать массив, вы можете сделать что-то вроде L( 'myKey', array('varname1'=>$var1, 'varname2' =>$var2) . Не уверен, что это проще.
Теги:
internationalization

1 ответ

0

Как обычно, я понял это сразу после запроса ^^

Здесь мое решение - если вы можете написать его лучше, не стесняйтесь отвечать, и я могу его принять.

// 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;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню