fcc*_*lho 12 python google-app-engine web-applications internationalization babel
您如何使用BABEL将Google App Engine Web应用程序国际化?我在这里寻找所有阶段:
mor*_*aes 11
1)在代码和模板中使用_()(或gettext()).模块全局或类定义中设置的转换字符串应使用某种形式的lazy gettext(),因为在导入模块时i18n将不可用.
2)使用pybabel提取所有翻译.这里我们传递两个要扫描的目录:模板目录和app目录.这将在/ locale目录中创建一个messages.pot文件,其中包含在这些目录中找到的所有字符串.babel.cfg是提取配置,根据您使用的模板引擎而有所不同:
$ pybabel extract -F ./babel.cfg -o ./locale/messages.pot ./templates/ ./app/
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
翻译消息.它们将位于每个翻译目录中的.mo文件中.翻译完所有语言环境后,编译它们:
$ pybabel compile -f -d ./locale
Run Code Online (Sandbox Code Playgroud)
稍后,如果添加了新的翻译,请重复步骤2并使用新的.pot文件更新它们:
$ pybabel update -l pt_BR -d ./locale/ -i ./locale/messages.pot
Run Code Online (Sandbox Code Playgroud)
然后翻译新字符串并再次编译翻译.
4)这里的策略可能会有所不同.对于每个请求,您必须设置要使用的正确翻译,并且可能希望缓存已加载的翻译以在后续请求中重用.