Интернационализация Django очень хороша (gettext базирующийся, LocaleMiddleware), но что надлежащий путь состоит в том, чтобы перевести имя модели и атрибуты для администраторских страниц? Я ничего не нашел об этом в документации:
Я хотел бы иметь "Выберите заказ для изменения" вместо "Выберите для изменения порядка". Отметьте, 'порядок' не переводится.
Во-первых, я определил модель, активированную USE_I18N = True
в settings.py, выполненном django-admin makemessages -l ru
. Никакие записи не создаются по умолчанию для имен модели и атрибутов.
Grepping в исходном коде Django я нашел:
$ ack "Select %s to change"
contrib/admin/views/main.py
70: self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
Так verbose_name
свойство meta, кажется, играет некоторую роль здесь. Попробованный для использования его:
class Order(models.Model):
subject = models.CharField(max_length=150)
description = models.TextField()
class Meta:
verbose_name = _('order')
Теперь обновленный po
файл содержит msgid 'order'
это может быть переведено. Таким образом, я вставил перевод. К сожалению, выполнение администраторских страниц показывает то же соединение "Выберите для изменения порядка".
Я в настоящее время использую Django 1.1.1. Кто-то мог указать на меня на соответствующую документацию? Поскольку Google не может.;-) Тем временем я вырою глубже в django исходный код...
Важные вещи, не упомянутые в документации Django:
django-admin compilemessages
, например, как часть вашего процесса сборки
процесса. Спасибо stevejalim! ugettext_lazy()
к именам моделей (Meta
класс и verbose_name
)verbose_name
) также могут быть переведены с помощью ugettext_lazy()
Пример с использованием вышеуказанных принципов:
from django.utils.translation import ugettext_lazy as _
class Order(models.Model):
subject = models.CharField(max_length=150, verbose_name = _('Order|subject'))
description = models.TextField( verbose_name = _('Order|description'))
class Meta:
verbose_name = _('order')
verbose_name_plural = _('orders')
Или есть лучший способ перевести страницы модели и администратора?
В любом случае, мы должны улучшить документацию Django и заполнить этот пробел!