20👍
✅
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.
Source:stackexchange.com