Gettext заполнители - PullRequest
       12

Gettext заполнители

5 голосов
/ 27 марта 2011

Я строю многоязычное приложение на PHP + CodeIgniter. Я остановился на использовании gettext для перевода текста пользовательского интерфейса, и до сих пор он оказался эффективным и простым в работе.

Но теперь я сталкиваюсь с чем-то действительно раздражающим: функция gettext() принимает только один параметр, в то время как я хотел бы, чтобы поведение, похожее на printf, получалось из адаптера gettext Zend Framework, где я могу использовать %1$s, %2$s и т. Д. В качестве заполнителей, а затем укажите замещающие строки в качестве дополнительных параметров для функции translate() представления Zend.

Я не хочу отказываться от gettext из-за легкого управления переводом с помощью .po файлов и poEdit (в конце концов, я могу обновить его одним щелчком мыши). Какие у меня варианты?

Я уже пытался написать помощник для взаимодействия с gettext: запустить первый аргумент через gettext, а затем запустить strtr для полученной строки. Есть ли другие / лучшие подходы, которые вы бы порекомендовали?

1 Ответ

6 голосов
/ 27 марта 2011

На самом деле это довольно просто, вы определяете функцию с переменным значением следующим образом:

function myGettext($id)
{
    return vsprintf(gettext($id), array_slice(func_get_args(), 1));
}

Теперь выполнение myGettext('%u %s in a %s', 3, 'monkeys', 'tree') вернет ожидаемую строку с заполнителями, замененными оставшимися аргументами.Очевидно, что вам также нужно реализовать функцию распознавания множественного числа, которая вместо этого вызывает ngettext().

Что касается poEdit, вам нужно изменить ключевые слова, которые он ищет, прошло некоторое время с тех пор, как я последний раз использовал его, но это было довольно просто.единственной проблемой, с которой я столкнулся, было определение ключевых слов для поддержки множественного числа ( смотри это ).

Надеюсь, это поможет!

...