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 =
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.