2016-04-29 134 views
0

我正在使用Django==1.8.4将Grub字符串传递给作为变量传递给ugettext的.po文件

在Django应用程序,我使用ugettext在明年的方式得到翻译的消息:

id = 1 
message = "Some message %(id)s" % {'id':id} 
return JsonResponse({'message': ugettext(message)}) 

在Django官方文档有关于与ugettext翻译变量。

(使用变量或计算的值,如 前面两个例子中需要说明的是,Django的翻译字符串检测 实用,Django的管理makemessages,将无法找到这些 串。更多makemessages后

来源:Django documentation page

是否有任何其他方式grub的消息没有重构的ugettext所有呼叫自动.po文件(通过直销t字符串变成ugettext而不是变量)?

回答

1

在替换变量前,在字符串上调用ugettext。

message = ugettext("Some message %(id)s") % {'id':id} 
+0

谢谢,我知道这是可能的。问题是如何避免这种重构。 –

+0

我不认为这是。变量'message'每次都会有所不同,所以它需要为.po文件中的每个版本生成消息。 你想如何让你的.po文件消息看起来像? 顺便说一句,你忘记了JsonResponse参数中的字典{}; 'JsonResponse({'message':ugettext(message)})'。 – Alvra

+0

**规范的**方法是在源代码中注释所有已翻译的源字符串,即'message = _(“某个消息%(id)s”)%{'id':id}',这样第三方工具可以找到所有这些字符串,即用于静态分析。 (Obv,'从xx import ugettext as _')请注意,对于每个面向用户的字符串“_()',这个”重构“只有3个字符。另一种方法是构建自己的工具链...然后试着向其他开发人员解释它,后者需要稍后支持您的代码。 –