Я считаю, что для использования 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, чтобы добавить 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
Другой подход - получить транс объект с чем-то вроде:
return gettext.translation(domain, localedir=localedir,languages=languages, codeset='utf-8')