如何为jinja模板启用{%trans%}标记?

2024-04-27 23:29:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试启用trans标记,并制作了一个测试模板i18n.html:

{% trans %}For sale{% endtrans %}--{{message}}--{{decimal_format}} 这是我根据manpages编写的python代码:

from webapp2_extras import i18n as multilingua
import jinja2
from webapp2_extras.i18n import lazy_gettext as gettext
from webapp2_extras.i18n import lazy_gettext as _
from jinja2 import Environment, FileSystemLoader
jinja_environment =  jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
                      extensions=['jinja2.ext.i18n'])

# The code below seems wrong since it is django but it was the only way I could make the page load

jinja_environment.install_gettext_translations(django.utils.translation)

class HelloWorldHandler(webapp2.RequestHandler):
    def get(self):
        # Set the requested locale.
        locale = self.request.GET.get('locale', 'pt')
        multilingua.get_i18n().set_locale(locale)
        message = multilingua.gettext('For sale')
        #django.utils.translation.activate('pt')
        template = jinja_environment.get_template('templates/i18n.html')
    decimal_format = multilingua.I18n(self.request).format_decimal(1000)
        self.response.out.write(template.render(message=message, decimal_format=decimal_format))

如果没有django,我就无法让它工作,因此我问如何丢失django翻译并使用webapp2.i18n+jinja。

a thread中也有一个讨论,我不是唯一一个说文档有点不完整或很难找到的人。请您回答或评论一下推荐的使trans标记工作的方法以及为什么我必须包含jinja_environment.install_gettext_translations(django.utils.translation) ?

当我试图删除对django的使用时,我也失去了webapp2.i18n的功能。。。和conf/locale。。因为第一个是webapp2的默认值,第二个是django翻译的默认值,所以我可以在这里使用一些最佳实践指南来消除django依赖项,并使用webapp2和jinja来呈现我的本地化。

如果需要帮助,我在尝试删除django时确实收到错误消息:

    self.response.out.write(template.render(message=message, decimal_format=decimal_format))
  File "/media/Lexar/montao/montaoproject/jinja2/environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "/media/Lexar/montao/montaoproject/templates/i18n.html", line 2, in top-level template code
    {{ _('For sale') }}--{{message}}--{{decimal_format}}
UndefinedError: 'gettext' is undefined

谢谢你


Tags: djangofromimportselfformatjinja2messageenvironment
2条回答

以下是Django+jinja2的一个工作示例:

from jinja2 import PackageLoader, Environment 
from django.utils import translation

。。。

jinja_environment = Environment(loader=PackageLoader('website', 'templates'),
                                extensions=['jinja2.ext.i18n'])

jinja_environment.install_gettext_translations(translation)

template = jinja_environment.get_template('test.jinja.html')

page_next_app_table = template.render()

。。。

在test.jinja.html中:

<html>
<b> {{ _( "Traslate This" ) }}:</b>
</html>

看看Jinja2的i18n Extension documentation。调用install_gettext_translations基本上设置Jinja2调用gettext、ngettext等的对象,以便在遇到{% trans %}标记时转换字符串。

由于这些函数是在webapp2.i18n(参见here)上定义的,jinja2将成功调用这些函数来检索翻译,这取决于您对请求内部set_locale的调用。我面前没有代码,但我猜gettextwebapp2.i18n中定义的company只是调用webapp.i18.get_i18n().gettext的代理,这是使所有这些工作正常的魔力。

相关问题 更多 >