现在我正在使用金字塔框架和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后,我不知道该怎么做。
怎么办?
答案 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应用程序上实现了国际化