首页 > 做 i18n 功能时如何在 Mako 模版引擎中使用下划线 _ ?

做 i18n 功能时如何在 Mako 模版引擎中使用下划线 _ ?

使用 Pyramid 框架和 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')

不知道为什么在 rendering 的页面中不好使。猜测可能是注册 _ 事件为 request.translate ,是不是也该定义包含一些例如 renderring 的方法的呢。

查看了官方文档,不知道怎么做。

如何做?

【热门文章】
【热门文章】