2009-07-16 12 views
11

私はDjangoアプリケーションのローカリゼーションを行っています。Djangoの管理者に翻訳されたフィールド名を使用させる

フロントエンドのWebサイトが正常に動作し、Django管理サイトでも選択した言語が選択されます。

ただし、言語設定は一部の場所でのみ適用され、翻訳されていても、フィールド名と列名のデフォルトの英語版が使用されます。どうして? 管理インターフェイスのカラム名とフィールド名に翻訳名を使用させるにはどうすればよいですか?

例:

  1. は、支払いのためのトップ
  2. 翻訳SELECTオプションで、このような "ようこそ" と "ログアウト" などの標準的な管理テキストを翻訳:私は取得対象の

    class Order(models.Model): 
        OPTIONS = ((0, _("Bank transfer")), (1, _("Cash on delivery")),) 
    
        user = models.ForeignKey(User, name=_("User")) 
        payment = models.IntegerField(choices=self.OPTIONS, name=_("Payment")) 
    

    タイプ

  3. フィールド( "ユーザ"、 "支払い")のカラム名とフォームラベルは翻訳されていません

私はDjango 1.0.2を使用しています。翻訳されていないテキストは、動作するロケールファイルとともにロケールファイルに表示されました。

サブ質問:アプリ名をローカライズすることは可能ですか?

答えて

13

の代わりにverbose_nameの代わりにの翻訳版を設定しました。

これは動作します:

class Order(models.Model): 
    OPTIONS = ((0, _("Bank transfer")), (1, _("Cash on delivery")),) 

    user = models.ForeignKey(User, verbose_name=_("User")) 
    payment = models.IntegerField(choices=self.OPTIONS, verbose_name=_("Payment")) 
+0

。 OPTIONS'から来た?これはNameErrorを発生させませんか? –

+0

@ChrisWesseling私はPythonをうまく使っていませんが、この場合はモジュール自身を参照していませんか? OPTIONSは "class Order"のすぐ上に定義されています... –

+0

バインドされたメソッドの最初のパラメータはオブジェクト自体です。規約上、これはselfと呼ばれますが、 'self'は' this'がJavaScriptやPHPにあるような魔法のキーワードではありません。明示的にバインドする必要があります。しかし私は間違っている可能性があります。 –

0

おそらくこのモデル(admin.py内)にカスタムModelFormを使用していますか?オーバーライドするフィールドのラベルにgettext-edの値を追加する必要があります。

Django 1.0ではアプリ名をローカライズすることはできません.1.1についてはわかりません。

7

当麻は、正しい答えを得ました。

しかし、Djangoは今ForeignKeyManyToManyFieldOneToOneFieldフィールド型のフィールド、exceptの冗長な名前として最初の引数を取ります。あなたは怠惰であれば だからあなたも書き込むことができます。

payment = models.IntegerField(_("Payment"), choices=self.OPTIONS) 

は、あなたはまだしかし、ForeignKey例えばキーワード引数を使用する必要があります。自己 `で` self`名をした

user = models.ForeignKey(User, verbose_name=_("User")) 
+0

ありがとうございました! –

関連する問題