我正在尝试从英文来源创建简体中文的翻译文件。这一切都是在Flask项目中发生的,并且我一直在使用Flask-Babel(到目前为止成功)来翻译西班牙语和法语。我添加了中文翻译文件,但遇到了以下问题。
请考虑以下英语字符串:
msgid "One message"
msgid_plural "%(num)d messages"
当只有一条消息时,我不想显示数字1
,而是要显示拼写的版本。
在中文中,单数和复数之间几乎没有语法上的区别,因此我们的译者在两个版本中仅包括一种翻译:
msgstr[0] "%(num)d [something in Chinese]"
当我尝试编译该文件时,出现以下错误消息:
未知命名占位符'num'
所以我试图复制这样的行(一
是中文1):
msgstr[0] "一 [something in Chinese]"
msgstr[1] "%(num)d [something in Chinese]"
但是后来我得到了这个错误:
msg的翻译数量超过目录的num_plurals
这很有意义:中文的nplurals
为1,因此msgstr
不应超过一个。
我在此阶段看到两个选择:
nplurals = 2
:"Plural-Forms: nplurals=2; plural=(n > 1)"
。%(num)d
。我对这两种选择都不满意。有其他选择吗?
答案 0 :(得分:0)
这似乎是babel中的错误,而不是gettext问题。
以下PO摘录是正确的,并使用+---------+--------+-------------+
| SNumber | SName | SPercentage |
+---------+--------+-------------+
| 415 | Nag | 70% |
+---------+--------+-------------+
进行编译:
msgfmt --check
在修复该错误之前,使用选项1(对复数形式的标头作弊)似乎是可行的解决方法。或者只是使用msgid ""
msgstr ""
...
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n"
...
"Plural-Forms: nplurals=1; plural=0;\n"
#: example.c:1
#, python-format
msgid "One message"
msgid_plural "%(num)d messages"
msgstr[0] "%(num)d [something in Chinese]"
而不是Python脚本来编译po文件。