2011-12-12 76 views
12

我尝试启用trans标签和我做了一个测试模板i18n.html:如何为jinja模板启用{%trans%}标记?

{% 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这里我不是唯一一个说,文件是有些不完整或难以找到。您能否回答或评论哪些是制作反式标签的推荐方式,以及为什么我必须包含jinja_environment.install_gettext_translations(django.utils.translation)

当我尝试删除我使用Django的我也失去webapp2.i18n的功能。我的区域设置文件都是locale/...和conf/locale ..因为第一个是webapp2的默认设置,第二个是django翻译的默认设置,所以我可以真正使用一些指导来获得最佳实践,以摆脱django依赖,并使用webapp2和jinja来渲染我的本地化。

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 

谢谢

+0

未记录的解决方案/解决方法,使我的jinja trans标签工作K:'从webapp2_extras进口国际化jinja_environment.install_gettext_translations(国际化)' –

+1

这将是有趣的,知道你是怎么发现这个无证解决方案/解决方法。 – eyquem

+1

任何人读这篇文章,这里是一个最新的指南如何做到这一点http://mikeshilkov.wordpress.com/2012/07/26/enable-jinja2-and-i18n-translations-on-google-appengine/ –

回答

9

看看的Jinja2的i18n Extension documentation

如果任何人的帮助,我也试图消除的Django时收到错误消息。调用install_gettext_translations基本上设置Jinja2将调用gettext,ngettext等的对象,以便在遇到{% trans %}标记时转换字符串。

由于这些功能在webapp2.i18n定义(见here),Jinja2的将成功地调用这些函数来检索请求的内部翻译,取决于您的来电set_locale。我没有在我面前的代码,但我猜gettextwebapp2.i18n定义的公司仅仅是代理调用webapp.i18.get_i18n().gettext,它是构成所有这些工作的法宝。

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>