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

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

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

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

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

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

or

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

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

Это приводит к более общему вопросу:

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

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


person GrGr    schedule 05.06.2009    source источник


Ответы (2)


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

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

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

person Paul Tarjan    schedule 05.06.2009
comment
Это в значительной степени то, как мы это делаем. Как вы отслеживаете строки вроде "Хорошая работа% s, у вас есть% i баллов на перевод?" - person GrGr; 05.06.2009
comment
Часто мы заключаем текст в - person Paul Tarjan; 05.06.2009

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

person David Schmitt    schedule 05.06.2009