笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

扩展

发布者: 笨鸟自学网

Jinja2 支持扩展来添加过滤器、测试、全局变量或者甚至是处理器。扩展的主要动力是 把诸如添加国际化支持的常用代码迁移到一个可重用的类。

添加扩展

扩展在 Jinja2 环境创建时被添加。一旦环境被创建,就不能添加额外的扩展。要添加 一个扩展,传递一个扩展类或导入路径的列表到 Environment 构造函数的 environment 参数。下面的例子创建了一个加载了 i18n 扩展的 Jinja2 环境:

jinja_env = Environment(extensions=['jinja2.ext.i18n'])

i18n 扩展

Import name: jinja2.ext.i18n

Jinja2 当前只附带一个扩展,就是 i18n 扩展。它可以与 gettext 或 babel 联合使用。如果启用了 i18n 扩展, Jinja2 提供了 trans 语句来标记被其包裹的 字符串为可翻译的,并调用 gettext 。

在启用虚拟的 _ 函数后,之后的 gettext 调用会被添加到环境的全局变量。那么 一个国际化的应用应该不仅在全局,以及在每次渲染中在命名空间中提供至少一个 gettext 或可选的 ngettext 函数。

环境方法

在启用这个扩展后,环境提供下面的额外方法:

jinja2.Environment.install_gettext_translations(translationsnewstyle=False)

在该环境中全局安装翻译。提供的翻译对象要至少实现 uggettext 和 ungettext 。 gettext.NullTranslations 和 gettext.GNUTranslations 类和 Babel‘s 的 Translations 类也被支持。

Changed in version 2.5: 添加了新样式的 gettext

jinja2.Environment.install_null_translations(newstyle=False)

安装虚拟的 gettext 函数。这在你想使应用为国际化做准备但还不想实现完整的 国际化系统时很有用。

Changed in version 2.5: 添加了新样式的 gettext

jinja2.Environment.install_gettext_callables(gettextngettextnewstyle=False)

在环境中把给出的 gettext 和 ngettext 可调用量安装为全局变量。它们 应该表现得几乎与标准库中的 gettext.ugettext() 和 gettext.ungettext() 函数相同。

如果激活了 新样式 ,可调用量被包装为新样式的可调用量一样工作。更多 信息见 新样式 Gettext 。

New in version 2.5.

jinja2.Environment.uninstall_gettext_translations()

再次卸载翻译。

jinja2.Environment.extract_translations(source)

从给定的模板或源中提取本地化字符串。

对找到的每一个字符串,这个函数生产一个 (lineno, function, message ) 元组,在这里:

  • lineno 是这个字符串所在行的行号。
  • function 是 gettext 函数使用的名称(如果字符串是从内嵌的 Python 代码中抽取的)。
  • message 是字符串本身(一个 unicode 对象,在函数有多个字符串参数 时是一个 unicode 对象的元组)。

如果安装了 Babel , Babel 集成 可以用来为 babel 抽取字符串。

对于一个对多种语言可用而对所有用户给出同一种的语言的 web 应用(例如一个法国社 区安全了一个多种语言的论坛软件)可能会一次性加载翻译并且在环境生成时把翻译方 法添加到环境上:

translations = get_gettext_translations()
env = Environment(extensions=['jinja2.ext.i18n'])
env.install_gettext_translations(translations)

get_get_translations 函数会返回当前配置的翻译器。(比如使用 gettext.find )

模板设计者的 i18n 扩展使用在 模板文档 中有描述。


上一篇:模板设计者文档下一篇:集成

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-10-18 17:04 , Processed in 0.083001 second(s), 17 queries .

© 2001-2020

返回顶部