Сделать администратором Django использование переведенных имен полей

Я делаю локализацию приложения Django.

Веб-интерфейс на лицевой панели отлично работает, а сайт администратора Django также выбирает выбранный язык.

Но в некоторых местах он использует только языковые настройки и использует английские версии имен полей и столбцов по умолчанию, хотя они были переведены. Зачем? Как я могу использовать переведенные имена для имен столбцов и полей в интерфейсе администратора?

Пример:

class Order(models.Model):
    OPTIONS = ( (0, _("Bank transfer") ), (1, _("Cash on delivery") ), )

    user = models.ForeignKey(User, name=_("User") )
    payment = models.IntegerField(choices=self.OPTIONS, name=_("Payment"))

Для чего я получаю:

  • Переведенные стандартные административные тексты, такие как "Добро пожаловать" и "Выход" в верхней части
  • Переведенные параметры SELECT для типа платежа
  • НЕ переведенные имена столбцов и метки форм для полей ( "Пользователь", "Оплата" ).

Я использую Django 1.0.2. Тексты, которые не переводятся, отображались в файлах локалей вместе с теми, которые работают.

Подзапрос: возможно ли локализовать имена приложений?

Ответ 1

Оказалось, что я устанавливаю переведенную версию для name вместо verbose_name.

Это работает:

class Order(models.Model):
    OPTIONS = ( (0, _("Bank transfer") ), (1, _("Cash on delivery") ), )

    user = models.ForeignKey(User, verbose_name=_("User") )
    payment = models.IntegerField(choices=self.OPTIONS, verbose_name=_("Payment"))

Ответ 2

TomA получил правильный ответ.

Но Django теперь принимает первый аргумент как подробное имя поля, кроме для ForeignKey, ManyToManyField и OneToOneField типы полей. Поэтому, если вы ленивы, вы также можете написать:

payment = models.IntegerField(_("Payment"), choices=self.OPTIONS)

Вам все равно придется использовать аргумент ключевого слова для примера ForeignKey, хотя:

user = models.ForeignKey(User, verbose_name=_("User"))

Ответ 3

Возможно, вы используете пользовательскую модель ModelForm для этой модели (в admin.py)? Вам нужно будет добавить значение gettext-ed для метки полей, которые вы переопределите.

Локализация имен приложений невозможна, так как Django 1.0 - не уверен в 1.1.