Куда переводить строки сообщений - в представлении или в модели? - PullRequest
0 голосов
/ 05 июня 2009

У нас есть многоязычное (PHP) приложение и мы используем gettext для i18n. В бэкэнде / модели есть несколько классов, которые возвращают сообщения или форматы сообщений для printf ().

Мы используем xgettext для извлечения строк, которые мы хотим перевести.

Мы применяем функцию gettext T_ () во внешнем интерфейсе / представлении - похоже, именно там она и принадлежит. До сих пор мы сохраняли бэкэнд чистым от вызовов T_ (), таким образом, мы также можем отправлять сообщения модульного тестирования.

Итак, во внешнем интерфейсе у нас есть что-то вроде

echo T_($mymodel->getMessage());

или

printf(T_($mymodel->getMessageFormat()), $mymodel->getValue());

Это делает невозможным применение xgettext для извлечения строк, если мы не поместим некоторый фиктивный вызов T _ («мое сообщение% s для перевода») в класс MyModel.

Так что это приводит к более общему вопросу:

Применяете ли вы перевод в бэкэнд-классах, соотв. где вы применяете перевод и как вы отслеживаете строки, которые вы должны перевести?

(мне известно о Вопрос: обходной путь poedit для динамического gettext .)

Ответы [ 2 ]

1 голос
/ 05 июня 2009

Мои бэкэнд-классы обычно выводят английские строки с опущенными параметрами. Пример

["Good job %s you have %i points", "Paul", 10]

Тогда ключ для перевода - английская строка (так как я не очень люблю коды сообщений).

0 голосов
/ 05 июня 2009

Перевод - для меня проблема просмотра, за исключением четко определенных деловых причин, таких как необходимость сохранять отображаемые сообщения, как показано. Последний может, например, произойдет, если вы хотите сохранить отправленный счет как доставленный клиенту.

...