"django-admin.py makemessages -l en" 将复数形式添加到输出文件

"django-admin.py makemessages -l en" adds Plural-Forms to the output file

每次我 运行 django-admin.py makemessages -l en,它都会在 djangojs.po 文件中添加以下行:

"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

之后,运行ning python manage.py runserver 因以下错误而中断:

ValueError: plural forms expression could be dangerous

当然,删除该行将修复错误。
如何防止添加此行?

P.S。 我正在寻找一种方法来强制 django-admin 不添加此行,或添加我喜欢的内容,或者至少不会产生错误的内容。

我正在使用 Django 1.11。

在所有出现的 .po 文件中用 "Plural-Forms: nplurals=2; plural= (n != 1);\n" 替换行应该可以让你继续!

gettext 通常在您使用 Django 翻译(i18n 和 l10n)时将单词翻译成单词。但是当您想将(大部分)名词翻译成 singular/plural 形式时,它会变得更加棘手。 例如,考虑这个例子:

if n == 1:
  string = "%d file is deleted"%n
else:
  string = "%d files are deleted"%n

处理国际化中复数的翻译,Plural-forms是遵循的标准。 Python-Django对ngettext的实现方式如下: (visit doc for your Django version)

ngettext('%d file is deleted', '%d files are deleted', n) % n

在大多数语言中,n!=1 被视为复数。在上面的示例中,当 n=1 时 Django 必须考虑 '%d file is deleted''%d files are deleted'n!=1 进行翻译。因此 .po 文件中复数形式的定义如下:"Plural-Forms: nplurals=2; plural= (n != 1);\n"

现在,当您 运行 makemessages 时,Django 正试图通过在 .po 文件中添加 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" 行来帮助您,提示必须将此行替换为我们的定义复数形式。

注意: 并非每种语言都有 2 个复数,例如日语、越南语、韩语、泰语不需要区分单数和复数(因此 Plural-Forms: nplurals=1; plural=0;)。另一方面,有一些语言,如罗马尼亚语、立陶宛语、俄语、波兰语 nplurals=3。查看 this link 以获取更多示例。

希望在您的情况下,nplurals=1。如果不是复数形式,请访问 this link

这是由于英语翻译目录中缺少复数形式导致的问题。结果,django 将 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" 作为默认值插入(这不是有效的语法)。

它在 django 2.0 发布时已修复。有关详细信息,请参阅 this issue

对于遇到此问题的任何人,可能值得检查您的 django 版本,并在必要时进行更新。