gpt4 book ai didi

python - Django - 管理模型中的多重多元化

转载 作者:太空狗 更新时间:2023-10-29 18:07:49 25 4
gpt4 key购买 nike

我在谷歌上搜索了很长时间,但没有结果。我是 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 výrobků
  • 1 维罗贝克
  • 2-4 比罗布基
  • 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}

来源来自django internationalization: counter is not available when marking strings for pluralization

也许,最后显示语言定义会很好(尝试从 msgid 添加/删除 %s):

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"

再一次,除了管理模型之外的任何其他地方,它都在工作。问题不是一般如何运行多重多元化,而是如何更改管理中的任何内容(例如新的抽象模型等)以在那里运行它......

最佳答案

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

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

然后,在您的模板中使用复数形式传递一个有效的计数器。 Gettext 拥有所有需要的信息:

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

关于python - Django - 管理模型中的多重多元化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15444087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com