做 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 的方法的呢。
查看了官方文档,不知道怎么做。
如何做?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我的解决方案:
注册绑定 translator 到 request
config.add_request_method(_, '_')
在模板文件中使用 request._ 来获取翻译
<a href="/about">${request._(u'About')}</a>
,同时 lingua 也能支持抽取这种类型的翻译token我的完整 mako, pyramid i18n 方案介绍: http://www.vincentsfootprint....