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

Ali*_*Ali 8 python jinja2 babel

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

Ali*_*Ali 13

我找到了解决方案.以下是如何在没有烧瓶集成的情况下使用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()
Run Code Online (Sandbox Code Playgroud)

现在rendered_template包含呈现的HTML内容,可能在"cs"语言环境中.

  • 但你如何控制语言呢?我期望能够传递类似 `template.render(locale='en')` 的东西 (3认同)