如何在i18n的mako渲染模板中使用_?

时间:2016-01-25 01:37:44

标签: python internationalization rendering pyramid mako

现在我正在使用金字塔框架和mako模板引擎。并希望添加i18n功能。

如果我写这段代码没有问题:

myprj/templates/show.html

${_context.detail_panel(order)}

它可以正确读取已编译的.mo文件,并显示来自某些语言的翻译消息。

但如果我这样使用它:

myprj/templates/_detail_panel_a.html

<h1>${_('Detail')}</h1>

并在此文件中编写代码:

Traceback (most recent call last):
...
File "/mypath/myprj/templates/_detail_panel_a.html", line 5, in render_body
<h1>${_('\u934j\u29jd\u01ld\u9dk3')}</h1>
MakoRenderingException:

Traceback (most recent call last):
...
File "/mypath/myprj/templates/_detail_panel_a.html", line 5, in render_body
<h1>${_('\u934j\u29jd\u01ld\u9dk3')}</h1>
UnboundLocalError: local variable '_' referenced before assignment

显示此错误:

myprj/myprj/subscribers.py

def add_renderer_globals(event):
    request = event['request']
    event['_'] = request.translate
    event['localizer'] = request.localizer

我以这种方式注册_事件:

__init__.py

并在myprj/myprj/__init__.py config.add_subscriber('myprj.subscribers.add_renderer_globals', 'pyramid.events.BeforeRender') 文件中调用它:

request.translate

当我使用渲染模板页面时,我不知道为什么它不起作用。我认为如果有必要定义_事件不仅{{1}},还要像渲染方法。

但在检查official document后,我不知道该怎么做。

怎么办?

1 个答案:

答案 0 :(得分:1)

您应该参考http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/templates/mako_i18n.html

它应该可以帮助您完成翻译。如您所见,您应该添加一个tsf全局变量(从上面的资源中的第11行开始)。

另外,您可能希望使用mako检查模板的渲染,因为从我读到的内容是将mako占位符放入html文件中。我建议使用此资源:http://docs.pylonsproject.org/projects/pyramid_mako/en/latest/

注意:如果在msg字符串中添加html标记,请使用| n过滤到$ {|中的mako占位符N}。

检查这些,如果你有其他问题,我很乐意提供帮助,我刚刚在我的Pyramid应用程序上实现了国际化