2016-04-29 120 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個字符。另一種方法是構建自己的工具鏈...然後試着向其他開發人員解釋它,後者需要稍後支持您的代碼。 –