不同复数数量的语言之间的翻译



我正在尝试从英文来源创建一个简体中文翻译文件。这一切都发生在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]"

但后来我得到了这个错误:

味精的翻译比目录num_plurals多

这是有道理的:中文的nplurals为 1,所以不应该超过一个msgstr

我在此阶段看到两个选项:

  1. 在我的中文 .po 文件上作弊,并声明该nplurals = 2与英语相同的规则:"Plural-Forms: nplurals=2; plural=(n > 1)"
  2. 更新我所有的源字符串,以便在复数版本中需要时,我总是在单数版本中使用%(num)d

我对这两种选择都不太满意。有没有其他选择?

这似乎是 babel 中的一个错误,而不是 gettext 的问题。

以下 PO 摘录是正确的,并使用msgfmt --check进行编译:

msgid ""
msgstr ""
...
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>n"
"Language: zh_CNn"
...
"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]"

在修复错误之前,使用选项 1(在复数形式标头上作弊)似乎是一种可行的解决方法。 或者只是使用msgfmt --check而不是 Python 脚本来编译 po 文件。

最新更新