我认为在bottle中使用jinja2,只需使用jinja2_template而不是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翻译对象,可以使用以下方式:
.....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')