0

我尝试使用 ZPT 模板在 Pyramid 中进行字符串翻译。我遵循了关于国际化和本地化的 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

some_translation_string当我在 ZPT 模板之外(即在视图的 Python 代码中)翻译字符串时,它会正确翻译。因此,我认为有一个有效的编译消息目录(尽管由于缺少 Python3 对 babel/lingua 的支持而手动创建)。

我想我误解了在 ZPT 模板中插入本地化字符串的方式。它可能与引用变量不同?

4

2 回答 2

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 文档中似乎缺少此信息。

于 2014-03-30T21:12:09.910 回答
1

作为参考,要翻译 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>
于 2014-07-31T09:01:31.777 回答