Форма Django и i18n

У меня есть формы, которые я хочу отображать на разных языках: я использовал параметр метки для установки параметра и использовал ugettext() на ярлыках:

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

Но когда я обрабатываю форму в своем шаблоне, используя

{{form.as_p}}

Этикетки не переведены. У кого-нибудь есть решение этой проблемы?

Ответ 1

Вы должны использовать 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() решает эту проблему, переведя строку, когда ее значение будет доступно, а не при вызове функции.