如何在烧瓶外使用jinja2及其i18n扩展(使用babel)

时间:2013-09-08 12:53:40

标签: python jinja2 babel

如何在烧瓶应用程序外使用jinja2和babel。 假设我有使用pybabel命令填充的语言环境目录。我想加载翻译文件并翻译我的模板文件。

2 个答案:

答案 0 :(得分:11)

我找到了解决方案。以下是如何在没有烧瓶集成的情况下使用jinja2 / babel。

前提条件

前提条件仅用于完成示例,所有这些都可以包含其他值或名称。

您对邮件使用名为“html”的邮件域(域名是任意名称,默认为“邮件”)。

目录“i18n”包含已翻译和编译的邮件(例如,文件为i18n/cs/LC_MESSAGES/html.mo)。

您更喜欢使用“cs”或“en”语言环境渲染模板。

模板位于目录templates中,并且存在名为stack.html的jinja2模板,因此存在文件templates/stack.html

代码示例

from jinja2 import Environment, FileSystemLoader
from babel.support import Translations

locale_dir = "i18n"
msgdomain = "html"
list_of_desired_locales = ["cs", "en"]
loader = FileSystemLoader("templates")
extensions = ['jinja2.ext.i18n', 'jinja2.ext.autoescape', 'jinja2.ext.with_']

translations = Translations.load(locale_dir, list_of_desired_locales)
env = Environment(extensions=extensions, loader=loader) # add any other env options if needed
env.install_gettext_translations(translations)

template = env.get_template("stack.html")
rendered_template = template.render()

rendered_template现在包含呈现的HTML内容,可能是“cs”语言环境。

答案 1 :(得分:2)

这很棒!感谢。

予。 jinja2依赖MarkupSafe

II。 Python babel依赖ytz

请参阅http://tlphoto.googlecode.com/git/jinja2_i18n_howto.txt

上的这些步骤
  1. 创建文件夹结构(逗号后面没有空格!!!)

    mkdir -pv ./lang/{en_US,zh_CN,fa_IR,es_VE,de_DE,ja_JP}/LC_MESSAGES /

  2. 提取

    pybabel -v extract -F babel.config -o ./lang/messages.pot ./

  3. 初始化/更新

    3.1 Init

    pybabel init -l zh_CN -d ./lang -i ./lang/messages.pot

    3.2更新

    pybabel update -l zh_CN -d ./lang -i ./lang/messages.pot

  4. 编译

    pybabel compile -f -d ./lang