Куда переводить строки сообщений - в представлении или в модели?

У нас есть многоязычное (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 ответа

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

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

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

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

Другие вопросы по тегам