11

私はこれを非常に長い間グーグルで検索しましたが、結果はありませんでした。私は Django の初心者なので、Django のすべての機能を知りません。しかし、この問題はクライアントにとって非常に重要です:-(助けてくれませんか?

だから、私はこのモデルを定義しました:

from django.utils.translation import ugettext_lazy as _

class Product(Model):
    #translation for model and set db table name
    class Meta:
        verbose_name = _('product')
        verbose_name_plural = _('products')
        ...

さて、チェコ語のため、管理者リストにこれらを書く必要があります:

  • 0 ヴィロブクー
  • 1 ヴィーロベック
  • 2-4 výrobky
  • 5- výrobků

他のどこでも、私はungettext正常に使用しています。ただし、メタでカウントを取得する方法がわかりません。私はこれを抽象的なものとして見つけました(しかし役に立たないようです):

class Model(DjangoModel):

    class Meta:
        abstract = True

    def get_description(self):
        return ungettext(self.verbose_name, self.verbose_name_plural, self.count) % \
                   {'count':self.count, 'name':self.name}

ソースはdjangoの国際化からのものです:複数形の文字列をマークするとき、カウンターは利用できません

たぶん、最後に言語定義を表示しても問題ないでしょう(から %s を追加/削除しようとしましたmsgid):

msgid "%s product"
msgid_plural "%s products"
msgstr[0] "%s 1 výrobek"
msgstr[1] "%s 2 výrobky"
msgstr[2] "%s 5 výrobků"

質問のためにさらに情報が必要な場合は、必ず提供します。

よろしくお願いします。

更新
.po ファイルで次を使用していることを確認してください。

"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"

繰り返しますが、管理モデル以外のどこでも、IT は機能しています。複数の複数形化を一般的に実行する方法ではなく、管理者で何かを変更する方法(たとえば、新しい抽象モデルなど)で実行する方法は問題です...

4

2 に答える 2

5

.po ファイルに入れる必要があります:

"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"

次に、テンプレートで有効なカウンターを渡す複数形を使用します。Gettext には必要なすべての情報があります。

  • 複数形がいくつあるか知っている
  • 数値の複数形を計算する方法を知っています
  • Django は複数形の msg_id とカウンターを渡します
于 2013-03-19T02:15:28.477 に答える
2

Django のソースを深く掘り下げた後では、多くの関数をオーバーライドせずに管理ユースケースでこれを行うことはできません。

于 2013-03-24T14:32:35.033 に答える