Интернационализация Django очень хороша (на основе gettext, LocaleMiddleware), но как правильно перевести имя модели и атрибуты для страниц администратора? В документации ничего по этому поводу не нашел:
- http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/
- http://www.djangobook.com/en/2.0/chapter19/
Я бы хотел, чтобы было "Выберите заказ для изменений" вместо "Выберите заказ для изменений". Обратите внимание, что «заказ» не переводится.
Сначала я определил модель, активировал 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
, кажется, играет здесь некоторую роль. Пытался использовать:
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. Может ли кто-нибудь указать мне на соответствующую документацию? Потому что гугл не может. ;-) А пока я углублюсь в исходный код django...
makemessages
обновляет только файлы po. Я думаю, вы имеете в видуdjango-admin compilemessages
- спасибо за подсказку! Я думал, что, поскольку python является динамическим языком, файлы перевода не компилируются, в отличие от C. К сожалению, мое решение по-прежнему не работает, обеспечивая смешанный перевод (языки смешаны в одном предложении). Для имени модели используется настройка проекта LANGUAGE_CODE. Язык оставшегося сообщения определяется агентом пользователя ("Accept-Languages"). Я поэкспериментирую с ленивым переводом и скажу, работает ли он. - person geekQ   schedule 31.05.2010