1

verbose_name各フィールドで引数を使用せずにdjangoモデルを翻訳するにはどうすればよいですか? 新しいフィールドの追加を探し、verbose_nameフィールドの名前で引数を自動的に提供する中間クラスによってすべてのモデルを継承する練習が発生しますか? それとも、翻訳をフォームに統合するのがベスト プラクティスですか? たぶんverbose_name、作成時にすべてのモデル属性を指定する必要がありますか?

私はこのようにしたくありません:

class Currency(models.Model):
    name=models.CharField(max_length=32, verbose_name=_("name"))
    symbol=models.CharField(max_length=32, verbose_name=_("symbol"))
    iso_4217=models.CharField(max_length=3)

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name=_(u'currency')
        verbose_name_plural=_(u'currencies')

私はこのようなことをしたい:

class BaseModel(models.Model):
    __setattr__(self, name, value):
        ''' Some needles parts of method was cutted out to make it easily
        '''
        value.verbose_name=_(name)
        value.verbose_name_plural=_("%ss" % name)
        self.super(BaseModel, name, value)

class Currency(models.Model):
    ''' Every field of this class whould be supplied by verbose_name and verbose_name_plural
    '''
    name=models.CharField(max_length=32)
    symbol=models.CharField(max_length=32)
    iso_4217=models.CharField(max_length=3)

たぶん、djangoには何か解決策がありますか?

4

2 に答える 2

2

この記事を読む必要があると思います。

アプリをローカライズするには、すべての英語の文字列を関数 ugettext の引数 ( 'foo'->など) にラップする必要がありますugettext('foo')

manage.py makemessages --locale=<locale>次に、を実行できます。<locale>言語コードです。

./locale/language_code/*.po 内にファイルを作成し、このファイル内の文字列を言語に翻訳する必要があります。

#: env_website/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django  /conf/global_settings.py:44
msgid "Arabic"
msgstr "Арабский"

その後、コマンドを実行する必要がありますmanage.py compilemessages

それでおしまい。

于 2012-12-06T08:41:54.100 に答える
1

Model のadd_to_classクラス メソッドをオーバーライドできます。追加されたフィールドごとに呼び出されます。

提供されていない場合、属性名からフィールドのcontribut_to_classがどのように設定されるかを確認してください。verbose_name

gettextただし、この分野の翻訳カタログを作成できないため、このアプローチはお勧めしません。

于 2012-12-06T15:12:11.517 に答える