9

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

4

2 回答 2

16

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

前提条件

先决条件的描述只是为了完成示例,它们都可以有其他值或名称。

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

有一个目录“i18n”,其中包含已翻译和编译的消息(例如,带有文件i18n/cs/LC_MESSAGES/html.mo)。

您更喜欢使用“cs”或“en”语言环境来呈现模板。

模板位于目录中templates,并且存在一个名为 jinja2 的模板stack.html,因此存在一个文件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”语言环境中。

于 2013-09-09T11:49:34.823 回答
3

这很好用!谢谢。

一、jinja2依赖MarkupSafe

二、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 提取 -F babel.config -o ./lang/messages.pot ./

  3. 初始化/更新

    3.1 初始化

    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 编译 -f -d ./lang

于 2015-12-06T05:15:24.007 回答