2010-04-22 83 views
10

我有,我想在不同的語言顯示形式:我使用的標籤參數設置的參數,並在標籤上使用ugettext():Django的形式和國際化

agreed_tos = forms.BooleanField(label=ugettext('I agree to the terms of service and to the privacy policy.')) 

但是當我渲染在我的模板中使用的形式,使用

{{form.as_p}} 

標籤沒有翻譯。有人有解決這個問題的辦法嗎?

回答

19

你應該使用ugettext_lazy()

from django.utils.translation import ugettext_lazy 

# ... 
    agreed_tos = forms.BooleanField(label=ugettext_lazy('I agree to the terms of service and to the privacy policy.')) 

式樣和屬性初始化你的Django應用程序啓動時。如果您使用ugettext(),翻譯將在初始化時設置一次,並且不會更改。 ugettext_lazy()通過在訪問其值時轉換字符串來解決此問題,而不是在調用該函數時。

+0

太棒了。謝謝! – dfrankow 2011-02-08 20:39:59

+0

顯然重要的是ugettext_lazy具有登錄用戶/會話的上下文。 – BastiBen 2013-02-13 23:05:15