0

我正在使用 Django 开发一个多语言应用程序。一部分是使用 ContentType API 选择某物的类型。

如文档中所述,ContentType 对象名称是从 verbose_name 中提取的。

在我的情况下,verbose_name 是使用翻译的,xgettext_lazy但由于它在 期间复制到数据库中syncdb,因此 ContentType 没有翻译,verbose_name 没有翻译。

我希望能够更改外键在表单中的显示方式。

你知道我该怎么做吗?

干杯,

纳提姆

4

2 回答 2

0

您需要使用 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”

于 2012-01-17T10:15:30.503 回答
0

最后这是我找到的解决方案:

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)
于 2012-01-17T13:07:32.650 回答