python - “django-admin.py makemessages -l en”将复数形式添加到输出文件
问题描述
每次我运行时,它都会在djangojs.po文件django-admin.py makemessages -l en
中添加以下行:
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
之后,运行python manage.py runserver
中断并出现此错误:
ValueError: plural forms expression could be dangerous
当然,删除该行将修复错误。
如何防止添加此行?
PS我正在寻找一种方法来强制django-admin不添加这一行,或者添加我喜欢的东西,或者至少不会产生错误的东西。
我正在使用 Django 1.11。
解决方案
"Plural-Forms: nplurals=2; plural= (n != 1);\n"
在所有出现的 .po 文件中替换该行应该会让你继续前进!
当您使用 Django 翻译(i18n 和 l10n)时,gettext 通常会逐字翻译。但是当您想将(大部分)名词翻译成单数/复数形式时,它会变得更加棘手。例如,考虑这个例子:
if n == 1:
string = "%d file is deleted"%n
else:
string = "%d files are deleted"%n
为了处理国际化中的复数翻译,复数形式是要遵循的标准。Python-Django 以下列方式实现 ngettext:(请访问 Django 版本的文档)
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 试图通过"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
在 .po 文件中添加一行来帮助您,暗示该行必须替换为我们对复数形式的定义。
注意:并非每种语言都有 2 个复数,例如,日语、越南语、韩语、泰语不需要区分单数和复数(因此Plural-Forms: nplurals=1; plural=0;
)。另一方面,有一些语言,如罗马尼亚语、立陶宛语、俄语、波兰语nplurals=3
。查看此链接以获取更多示例。
希望在您的情况下,nplurals=1。如果不访问此链接以获取复数形式。
推荐阅读
- flutter - 无论如何要减小这个 Flutter 应用程序的大小(120mb)
- python - 如何使用 PySerial 重新连接蓝牙连接(算法问题)Raspberry Pi - 蓝牙设备
- sql - Oracle SQL:在一系列值上滞后
- php - 将端点反射为 Symfonys 序列化器的模型,同时考虑共享响应属性
- c++ - 第一个使用迭代 DFS 而不是递归 DFS 的 DFS 路径
- c# - 在 WPF/Wix 中配置多个环境
- python - 条件多元 KDE 有多个最大值和最小值
- powershell - PowerShell 错误记录的“InvocationInfo”为空/不正确
- json - 如何将文本节点转换为对象节点以添加子节点
- java - 使用 Logger.getGlobal() 与 tomcat9 和 org.apache.logging.log4j.jul.LogManager - log4j 配置被忽略