2

在我在金字塔应用程序中进行的测试中,我试图通过 JSON 发送可翻译的文本,但翻译不起作用。在文件的开头,我正在导入翻译字符串函数:

from pyramid.i18n import TranslationString as _

然后考虑以下代码:

@view_config(route_name='transtest', renderer='json')
def transtest_view(request):
    return { 'myvar': _('temp-test', default='Temporary test', domain='myapp') }

但我得到的是:

{"myvar": "temp-test"}

请注意,如果我将渲染器更改为测试模板,我会执行以下操作:

@view_config(route_name='transtest', renderer='../templates/transtest.pt')
...

然后文本被正确翻译(请注意,我已经初始化了目录,更新了它们,编译了它们等)

这让我觉得 TranslationString 类在“json”渲染器中不能正常工作?如果是这样,我怎样才能通过 JSON 发送可翻译的字符串?

提前致谢

4

1 回答 1

3

您需要使用get_localizer()and明确翻译您的消息字符串Localizer.translate()

from pyramid.i18n import get_localizer

@view_config(route_name='transtest', renderer='json')
def transtest_view(request):
    message = _('temp-test', default='Temporary test', domain='myapp')
    return {'myvar': get_localizer(request).translate(message)}

通常,模板会为您处理这些步骤,但对于 JSON,您需要自己完成。

您可能想TranslationStringFactory为您的项目定义一个,并重用它来生成您的消息字符串。将以下内容添加到您的项目中:

from pyramid.i18n import TranslationStringFactory

myapp_domain = TranslationStringFactory(domain='myapp')

然后使用:

from my.project import myapp_domain as _

# ....

message = _('temp-test', default='Temporary test')
于 2013-07-22T16:24:57.350 回答