1) 在代码和模板中使用 _() (或 gettext())。模块全局变量或类定义中设置的翻译字符串应使用某种形式的惰性 gettext(),因为导入模块时 i18n 将不可用。
2)使用pybabel提取所有翻译。这里我们传递两个要扫描的目录:模板目录和应用程序目录。这将在 /locale 目录中创建一个 messages.pot 文件,其中包含在这些目录中找到的所有字符串。 babel.cfg 是提取配置,根据您使用的模板引擎而有所不同:
$ pybabel extract -F ./babel.cfg -o ./locale/messages.pot ./templates/ ./app/
3) 为每种语言初始化一个目录。此操作仅执行一次。这里我们初始化三个翻译,en_US、es_ES 和 pt_BR,并使用在步骤 2 中创建的 messages.pot 文件:
$ 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)这里的策略可能会有所不同。对于每个请求,您必须设置要使用的正确翻译,并且可能希望缓存加载的翻译以便在后续请求中重用。