0

Django を使用して多言語アプリケーションを開発しています。その 1 つは、ContentType API を使用して何かのタイプを選択することです。

ドキュメントで説明されているように、ContentType オブジェクト名は verbose_name から抽出されます。

私の場合、verbose_name は を使用して翻訳xgettext_lazyされますが、 の実行中にデータベースにコピーされるsyncdbため、ContentType の翻訳はなく、verbose_name は翻訳されません。

フォームでの外部キーの表示方法を変更できるようにしたいと考えています。

どうすればそれができるか考えていますか?

乾杯、

ネイティム

4

2 に答える 2

0

ugettextの代わりにugettext_lazyを使用する必要があり、データベースには保存されませんが、一部の.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が必要です。それができたら、「pythonmanage.pymakemessages」と「pythonmanage.pycompilemessages」を実行するだけです。

于 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 に答える