Использование `ugettext` в определении поля Django

#django #internationalization #gettext

#django #интернационализация #gettext

Вопрос:

В моем models.py файле я определяю поле в модели, подобной этой:

 description = models.CharField(
    max_length=40,
    default=_('Bla bla bla'),
)
  

Теперь _ есть django.utils.translation.ugettext , и я хочу использовать в качестве значения по умолчанию перевод на иврит 'Bla bla bla' , который является 'בלה בלה בלה' . (Веб-сайт только на иврите.) Строка правильно переведена в файле messages. Но когда я запускаю Django admin и создаю новый объект, я вижу английский 'bla bla bla' в поле. Я предполагаю, что английский является активным языком при компиляции models.py модуля. Как я могу решить это и сделать это на иврите?

Я знаю, что одним из решений было бы отказаться ugettext и просто написать иврит внутри модуля Python, но я предпочитаю избегать этого, чтобы предотвратить ад кодирования.

Ответ №1:

Попробуйте ugettext_lazy

https://docs.djangoproject.com/en/1.3/topics/i18n/internationalization/#lazy-translation

Всегда используйте отложенные переводы в моделях Django.

Ответ №2:

ugettext просто помечает строки как переводимые. Сам по себе он не выполняет для вас никакого перевода. Вы должны создать языковые файлы (.mo и .po), а затем установить параметр LANGUAGE_CODE соответствующим. Прочитайте документацию Django по интернационализации и локализации для получения более подробной информации.