Интернационализация веб-приложений GAE с Babel - PullRequest
12 голосов
/ 29 сентября 2010

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

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

1 Ответ

11 голосов
/ 30 сентября 2010

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

2) Извлеките все переводы, используя pybabel. Здесь мы передаем две директории для сканирования: шаблоны dir и app dir. Это создаст файл 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) Стратегия здесь может отличаться. Для каждого запроса вы должны установить правильные переводы, которые будут использоваться, и, возможно, захотите кэшировать загруженные переводы для повторного использования в последующих запросах.

...