Интернационализация веб-приложений GAE с помощью Babel

Как бы вы подошли к интернационализации приложения веб-приложения Google App Engine с помощью BABEL? Ищу здесь все этапы:

  1. Пометка строк для перевода.
  2. Извлечение их.
  3. перевод
  4. Настройка вашего приложения для загрузки правильного языка, запрашиваемого браузером

person fccoelho    schedule 29.09.2010    source источник


Ответы (1)


1) используйте _() (или gettext()) в своем коде и шаблонах. Переведенные строки, установленные в глобальных переменных модуля или определениях классов, должны использовать некоторую форму отложенного gettext(), потому что i18n будет недоступен при импорте модулей.

2) Извлеките все переводы с помощью pybabel. Здесь мы передаем два каталога для сканирования: каталог шаблонов и каталог приложения. Это создаст файл messages.pot в каталоге /locale со всеми строками, найденными в этих каталогах. babel.cfg — это конфигурация извлечения, которая зависит от используемого механизма шаблонов:

$ pybabel extract -F ./babel.cfg -o ./locale/messages.pot ./templates/ ./app/

3) Инициализировать каталог для каждого языка. Это делается только один раз. Здесь мы инициализируем три перевода, en_US, es_ES и pt_BR, и используем файл messages.pot, созданный на шаге 2:

$ pybabel init -l en_US -d ./locale -i ./locale/messages.pot 
$ pybabel init -l es_ES -d ./locale -i ./locale/messages.pot 
$ pybabel init -l pt_BR -d ./locale -i ./locale/messages.pot

Переведите сообщения. Они будут в файлах .mo в каждом каталоге перевода. После перевода всех локалей скомпилируйте их:

$ pybabel compile -f -d ./locale

Позже, если будут добавлены новые переводы, повторите шаг 2 и обновите их, используя новый файл .pot:

$ pybabel update -l pt_BR -d ./locale/ -i ./locale/messages.pot

Затем переведите новые строки и снова скомпилируйте переводы.

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

person moraes    schedule 30.09.2010
comment
Спасибо, Мораес, шаг 4 все еще ускользает от меня. Я надеюсь, что некоторые опубликуют хорошее решение для этого. - person fccoelho; 30.09.2010
comment
У кого-нибудь есть простое предложение по пункту 4 этого ответа? - person fccoelho; 06.10.2010
comment
номер 4 - битая ссылка.. :/ - person Lipis; 24.12.2012