2009-07-16 2 views
11

Я занимаюсь локализацией приложения Django.Сделать Django admin использовать переведенные имена полей

Интерфейсный сайт работает отлично, а сайт администратора 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. Тексты, которые не переводятся, отображаются в файлах локали вместе с работающими.

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

ответ

13

Оказалось, что я устанавливал переведенную версию для имени вместо 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")) 
+0

Где сделал 'self' имя в' я. ВАРИАНТЫ? Разве это не повышает значение NameError? –

+0

@ChrisWesseling Я не очень хорошо разбираюсь в Python, но не сам ссылаюсь на сам модуль в этом случае? ОПЦИИ определяется прямо над «порядком класса» ... –

+0

Первым параметром связанного метода является сам объект. По соглашению это называется self, но 'self' не является волшебным ключевым словом, как' this' в JavaScript или PHP; он должен быть явно связан. Но я могу ошибаться. –

0

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

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

7

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

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

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

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

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

Спасибо за обновление! –

Смежные вопросы