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