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