Django - 管理模型中的多重复数

tom*_*mis 11 python django python-2.7 django-1.5

我用谷歌搜索了很长时间但没有结果.我是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')
        ...
Run Code Online (Sandbox Code Playgroud)

现在,由于捷克语,我需要在管理员列表中写这些:

  • 0výrobků
  • 1výrobek
  • 2-4výrobky
  • 5-výrobků

在其他地方,我使用ungettext成功.但是,我不知道,如何计算Meta.我发现这是抽象的(但似乎没用):

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}
Run Code Online (Sandbox Code Playgroud)

来自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?"
Run Code Online (Sandbox Code Playgroud)

如果您需要更多问题信息,我一定会提供.

非常感谢你提前.

更新
请确保我在.po文件中使用以下内容:

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

除了管理模型之外的其他任何地方,IT都在工作.它的问题不是如何一般地运行多元化,而是如何在管理中改变任何东西(例如新的抽象模型等)来运行它...

小智 5

你需要输入你的.po文件:

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

然后,在您的模板中,您使用复数形式传递有效的计数器.Gettext包含所需的所有信息:

  • 它知道有多少复数
  • 它知道如何计算数字的复数
  • Django传递msg_id为复数和一个计数器


tom*_*mis 2

深入研究 Django 源代码后,如果不重写许多函数,就不可能在管理用例中做到这一点。