I have forms that I want to display in different languages : I used the label parameter to set a parameter, and used ugettext() on the labels :
agreed_tos = forms.BooleanField(label=ugettext('I agree to the terms of service and to the privacy policy.'))
But when I am rendering the form in my template, using
{{form.as_p}}
The labels are not translated. Does somebody have a solution for this problem ? 开发者_如何学Python
You should use 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.'))
Model and form attributes are initialized when your Django application starts. If you use ugettext()
, the translation will be set once at initialization and never change. ugettext_lazy()
solves this problem by translating the string when its value is accessed rather than when the function is called.
精彩评论