Заставьте администратора Django использовать переведенные имена полей - PullRequest
12 голосов
/ 17 июля 2009

Я делаю локализацию приложения 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"))

Для которых я получаю:

  1. Переведенные стандартные тексты администратора, такие как «Приветствие» и «Выход из системы» вверху
  2. Переведенные опции SELECT для типа платежа
  3. НЕ переведенные названия столбцов и метки форм дляполя («Пользователь», «Оплата»)

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

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

Ответы [ 3 ]

15 голосов
/ 17 июля 2009

Оказалось, что я устанавливал переведенную версию для 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"))
8 голосов
/ 27 июля 2011

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

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

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

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

user = models.ForeignKey(User, verbose_name=_("User"))
0 голосов
/ 17 июля 2009

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

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

...