Comments

Flask 应用国际化

Babel

Babel is an integrated collection of utilities that assist in internationalizing and localizing Python applications, with an emphasis on web-based applications.

  • 文档:http://babel.pocoo.org/en/latest/
  • 代码:https://github.com/python-babel/babel

Flask-Babel

Flask 的 i18n 扩展,集成 babel、pytz 等。

  • 文档:https://pythonhosted.org/Flask-Babel/
  • 代码:https://github.com/python-babel/flask-babel

使用

  • 安装:pip install Flask-Babel

  • babel 配置文件:babel.cfg

[python: **.py]
[jinja2: **.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension
  • Flask-Babel 配置:
BABEL_DEFAULT_LOCALE = 'zh_CN’                  # locale 选项,默认 'en'
BABEL_DEFAULT_TIMEZONE = 'Asia/Shanghai'        # 时区,默认 'UTC'
BABEL_TRANSLATION_DIRECTORIES = 'translations'  # 翻译文件所在目录,默认 'translations'
  • 生成翻译文件模版:
$ pybabel extract -F babel.cfg -o messages.pot .

如果使用了 lazy_gettext() 这样的函数,需要在上面的命令行参数指定:

$ pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .
  • 生成翻译文件:
$ pybabel init -i messages.pot -d translations
  • 编辑 translations/zh_CN/LC_MESSAGES/messages.po 文件,手动翻译。po 文件内容形如:
#: forms.py:65 forms.py:78
#: templates/flask_user/emails/invite_child_user_message.html:9
msgid "Username"
msgstr ""

其中:

  • #: 注释内容是 ‘文件名:行号’,即所有出现过的地方

  • msgid 是需要翻译的内容

  • msgstr 是翻译后的内容,如果留空,则会显示原文,即 msgid

  • 更新翻译文件(一般只需要 init 一次):

$ pybabel update -i messages.pot -d translations
  • 编译
$ pybabel compile -d translations

工作流

$ pybabel extract -F babel.cfg -o messages.pot .
$ pybabel init -i messages.pot -d translations     # 第一次
$ pybabel update -i messages.pot -d translations   # 更新
# 手动翻译
$ pybabel compile -d translations

欢迎关注我的公众号

Comments

getElementsByTagName('BODY')[0]).appendChild(s); }()); getElementsByTagName('BODY')[0]).appendChild(s); }()); getElementsByTagName('BODY')[0]).appendChild(s); }()); comments powered by Disqus ript">comments powered by Disqus.