我尝试使用ZPT模板在Pyramid中使用字符串翻译。我遵循金字塔国际化和本地化指南,即http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/i18n.html#chameleon-template-support-for-translation-strings。
然而,当我添加行
<span>${some_translation_string}</span>
到我的.pt模板文件我只是从服务员那里得到一条断言消息:
NameError: some_translation_string
当我在ZPT模板之外(即在视图的Python代码中)翻译字符串some_translation_string
时,它会正确翻译。因此,我认为有一个有效的编译消息目录(虽然由于缺少对babel / lingua的Python3支持而手动创建)。
我想我误解了一般在ZPT模板中插入本地化字符串的方法。它可能与引用变量不一样吗?
答案 0 :(得分:1)
据我所知,ZPT模板中的翻译应如下所示:
<span i18n:translate="">some_translation_string</h1>
如果省略i18n:translate
中的字符串标识符,则使用字符串本身。
此外,您必须在模板标题中添加域名,例如:
<html lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="my_domain">
引用的Pyramid文档中似乎缺少此信息。
答案 1 :(得分:0)
作为参考,为了对您的JavaScript代码中的消息进行翻译,我发现这样方便:
在您的视图中,将TranslationStringFactory
实例添加到模板参数:
from translationstring import TranslationStringFactory
@view_config(route_name='site', renderer='templates/site.pt')
def form(request):
...
return {'_': TranslationStringFactory('yourapp')}
然后在模板中你可以写:
<script type="text/javascript">
...
yourapp.i18n['error'] = '${_('Error')}';
yourapp.i18n['warning'] = '${_('Warning')}';
</script>