【发布时间】:2014-06-10 12:56:55
【问题描述】:
我相信将 jinja2 与第一瓶一起使用只需使用 jinja2_template 而不是模板: 例如bottle.jinja2_template("mytemplate", dict(name=value, name2=value2)) 但是,如果需要 i18n jinja 扩展,最好如何指定也这样做
....install_gettext_translations(
?这是自动完成的
bottle.jinja2_template("mytemplate", dict(name=value, name2=value2), template_lookup=['templates'],'template_settings'= {'extensions':['jinja2.ext.i18n'],'autoescape': True }))
?谢谢。
经过进一步思考,我想我可能需要覆盖 Jinja2Template 类中的 prepare 方法以添加 env.install_gettext_translations( ???
更多信息,如果我在做 ....install_gettext_translations( 手动,也许:
tenv = Environment(extensions=['jinja2.ext.i18n'])
tenv.install_gettext_translations(gettransobj())
import gettext
import locale
def gettransobj():
loc = locale.getlocale()
# change to reflect where your mo files are
mofilename = "res/messages_%s.mo" % locale.getdefaultlocale()[0][0:2]
try:
trans = gettext.GNUTranslations(open( mofilename, "rb" ) )
except IOError:
trans = gettext.NullTranslations()
return trans
OR for babel translations obj 之类的
.....install_gettext_translations(gettransobj(),newstyle=True)
import babel
import locale
def gettransobj():
loc = locale.getlocale()
mofilename = "res/messages_%s.mo" % locale.getdefaultlocale()[0][0:2]
trans = babel.support.Translations(open( mofilename, "rb" ) )
如果这段代码有些正确,不知道该放在哪里?对jinja2不是很熟悉。仅在程序顶部或每个 bottle.jinja2_template 调用中执行一次。
另一方面,如果有人需要使用 babel 进行提取,请参阅 jinja2.ext.babel_extract
另一种方法是通过以下方式获取 trans obj:
return gettext.translation(domain, localedir=localedir,languages=languages, codeset='utf-8')
【问题讨论】:
标签: python internationalization jinja2 bottle python-babel