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

如果我编写此代码,没有问题:

myprj/templates/index.html

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


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

但是,如果我这样使用它:

myprj/templates/show.html

${_context.detail_panel(order)}


并在此文件中编写代码:

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,还需要定义诸如render方法之类的东西。

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

怎么做?

最佳答案

您应该参考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/

注意:如果将html标记添加到味精字符串中,请使用| n按$ {|过滤到mako占位符中n}。

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

关于python - 如何在i18n的mako渲染模板中使用_?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34983858/

10-11 01:48