Как сделать ContentType Foreignkey i18n? - PullRequest
0 голосов
/ 17 января 2012

Я разрабатываю многоязычное приложение с использованием Django.Одна часть заключается в выборе типа чего-либо с помощью ContentType API.

Как описано в документе, имя объекта ContentType извлекается из verbose_name.

В моем случае verbose_name переводится с использованиемxgettext_lazy но так как он копируется в базу данных во время syncdb, для ContentType нет перевода, verbose_name не переводится.

Я хотел бы иметь возможность изменить способ использования внешнего ключаотображается в форме.

У вас есть идеи, как я могу это сделать?

Приветствия,

Натим

Ответы [ 2 ]

0 голосов
/ 17 января 2012

Наконец вот решение, которое я нашел:

def content_type_choices(**kwargs):
    content_types = []
    for content_type in ContentType.objects.filter(**kwargs):
        content_types.append((content_type.pk, content_type.model_class()._meta.verbose_name))

    return content_types

LIMIT_CHOICES_TO = {'model__startswith': 'pageapp_'}

class PageWAForm(forms.ModelForm):
    app_page_type = forms.ModelChoiceField(queryset=ContentType.objects.filter(**LIMIT_CHOICES_TO), 
                                           empty_label=None)

    def __init__(self, *args, **kwargs):
        super(PageWAForm, self).__init__(*args, **kwargs)
        self.fields['app_page_type'].choices = content_type_choices(**LIMIT_CHOICES_TO)
0 голосов
/ 17 января 2012

Вам нужно использовать ugettext_lazy вместо ugettext, и он не хранится в базе данных, а в некоторых файлах .po.Например:

from django.utils.translation import ugettext_lazy as _

class Event(models.Model):
    ...

    class Meta:
        verbose_name = _(u'Event')
        verbose_name_plural = _(u'Events')

Для блоков кода, которые загружаются во время импорта, вам нужно использовать ugettext_lazy, а для тех, которые загружаются во время выполнения, вам нужен ugettext.Если у вас есть это, вам просто нужно сделать «python manage.py makemessages» и «python manage.py compilemessages»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...