#useful_stuff
API Django перевода предоставляет несколько функций, которые помогут вам перевести ваше приложение. Все они доступны в модуле django.utils.translation. В большинстве случаев вы будете использовать ugettext() и ugettext_lazy().
Префикс u означает unicode, и обычно лучше использовать ugettext() вместо gettext() и ugettext_lazy() вместо gettext_lazy(), поскольку по большей части мы будем работать с международными кодировки.
Итак, что произойдет, если вы используете ugettext() (вместо ugettext_lazy()) в определении модели (скажем, в поля label):
1. Django запускается, язык по умолчанию - английский;
2. Django выбирает английскую версию label полей;
3. Пользователь меняет язык сайта на русский;
4. Labels по-прежнему отображаются на английском языке (поскольку определение поля вызывается только один раз к тому времени, когда оно было вызвано, язык был другим).
Чтобы избежать этого поведения, вы должны правильно использовать ugettext_lazy() и ugettext() .
Вот краткое изложение того, когда использовать ugettext() или ugettext_lazy():
ugettext_lazy():
- models.py (fields, verbosename, helptext, methods shortdescription);
- forms.py (labels, helptext, emptylabel);
- apps.py (verbosename).
ugettext():
- views.py
- Другие модули, похожие на views, которые выполняются в процессе запроса