翻译应用

首先你需要用 gettext() 或者 ngettext() 在你的应用中标记你要翻译的所有字符串。在这之后,是时候创建一个 .pot 文件。一个 .pot 文件包含所有的字符串,并且它是一个 .po 文件的模板,.po 文件包含已经翻译的字符串。Babel 可以为你做所有的这一切。

首先你必须进入到你的应用所在的文件夹中并且创建一个映射文件夹。对于典型的 Flask 应用,这是你要的:

  1. [python: **.py]
  2. [jinja2: **/templates/**.html]
  3. extensions=jinja2.ext.autoescape,jinja2.ext.with_

在你的应用中把它保存成 babel.cfg 或者其它类似的东东。接着是时候运行来自 Babel 中的 pybabel 命令来提取你的字符串:

  1. $ pybabel extract -F babel.cfg -o messages.pot .

如果你使用了 lazy_gettext() 函数,你应该告诉 pybabel,这时候需要这样运行 pybabel:

  1. $ pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .

这会使用 babel.cfg 文件中的映射并且在 messages.pot 里存储生成的模板。现在可以创建第一个翻译。例如使用这个命令可以翻译成德语:

  1. $ pybabel init -i messages.pot -d translations -l de

-d translations 告诉 pybabel 存储翻译在这个文件夹中。这是 Flask-Babel 寻找翻译的地方。可以把它放在你的模板文件夹旁边。

现在如有必要编辑 translations/de/LC_MESSAGES/messages.po 文件。如果你感到困惑的话请参阅一些 gettext 教程。

为了能用需要编译翻译,pybabel 再次大显神通:

  1. $ pybabel compile -d translations

如果字符串变化了怎么办?像上面一样创建一个新的 messages.pot 接着让 pybabel 整合这些变化:

  1. $ pybabel update -i messages.pot -d translations

之后有些字符串可能会被标记成含糊不清。如果有含糊不清的字符串的时候,务必在编译之前手动地检查他们并且移除含糊不清的标志。