金字塔TranslationString不适用于json渲染器

时间:2013-07-21 01:58:39

标签: python pyramid

在我在金字塔应用程序中进行的测试中,我试图通过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发送可翻译的字符串?

提前致谢

1 个答案:

答案 0 :(得分:3)

您需要使用get_localizer()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')