我相信将 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
或者对于 babel 翻译 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')