每次我运行django-admin.py makemessages -l en
时,都会在 djangojs.po 文件中添加以下行:
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
运行python manage.py runserver
之后,出现以下错误:
ValueError: plural forms expression could be dangerous
当然,删除该行可修复错误并使其消失。
如何防止添加此行?
答案 0 :(得分:1)
这是由于 en 翻译目录中缺少复数形式造成的问题。结果 django 插入了 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
作为默认值(这是无效的语法)。
django 2.0 发布时修复。有关详细信息,请参阅 this issue。
对于遇到此问题的任何人,可能值得检查您的 django 版本,并在必要时进行更新。
答案 1 :(得分:-1)
在所有出现的.po文件中都用 True
True
True
True
True
True
True
True
True
True
True
True
True
False
True
True
True
True
False
False
False
False
False
False
False
...
DONE
替换行将使您开始工作!
gettext通常在您使用Django翻译(i18n和l10n)时将单词翻译成单词。但是,当您要将名词(主要是名词)翻译成单数或复数形式时,就会变得比较棘手。 例如,考虑以下示例:
"Plural-Forms: nplurals=2; plural= (n != 1);\n"
要处理国际化中的复数形式,Plural-forms是要遵循的标准。 Python-Django通过以下方式实现ngettext: (visit doc for your Django version)
if n == 1:
string = "%d file is deleted"%n
else:
string = "%d files are deleted"%n
在大多数语言中,n!= 1被认为是复数。在上面的示例中,当ngettext('%d file is deleted', '%d files are deleted', n) % n
和Django n=1
进行翻译时,Django必须考虑'%d file is deleted'
和'%d files are deleted'
。因此,.po文件中的复数形式的定义如下:n!=1
现在,当您运行"Plural-Forms: nplurals=2; plural= (n != 1);\n"
时,Django试图通过在.po文件中添加makemessages
行来帮助您,提示必须用我们的复数形式定义替换此行。 / p>
注意:
并非每种语言都有2个复数,例如,日语,越南语,韩语,泰语不需要区分单数和复数(因此"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
)。另一方面,Plural-Forms: nplurals=1; plural=0;
的语言包括罗马尼亚语,立陶宛语,俄语,波兰语。查看this link以获得更多示例。
希望您的情况是nplurals = 1。如果不是,请访问this link以获取复数形式。