python - 如何在 Flask 外使用 jinja2 及其 i18n 扩展(使用 babel)

标签 python jinja2 python-babel

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

最佳答案

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

先决条件

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

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

有一个目录“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”语言环境中。

关于python - 如何在 Flask 外使用 jinja2 及其 i18n 扩展(使用 babel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18683905/

相关文章:

Python:从嵌套字典和列表中递归提取注释树

python - 在 jinja2 中使用 django 过滤器

python - Jinja2 模板继承

python - 使用蓝图在 Flask 中重复 url_prefix

python - Flask Babel 不起作用

python - 如何使用 lxml 从 KML 获取元素值

Python IDLE 无法工作,因为缺少 python.exe

python - 如何使用python类型提示动态地将父方法的返回类型指定为子类?

python - 使用 python gae、babel 和 i18n 进行国际化。无法输出正确的字符串