复数的错误/警告:"数量'1'匹配多个特定数字......"

and*_*per 9 string android plural language-translation

背景

我在一个内部有很多翻译的应用程序上工作.

我有下一个英文复数字符串:

<plurals name="something">
    <item quantity="one">added photo</item>
    <item quantity="other">added %d photos</item>
</plurals>
Run Code Online (Sandbox Code Playgroud)

和法语翻译:

<plurals name="something">
    <item quantity="one">a ajouté une photo</item>
    <item quantity="other">a ajouté %d photos</item>
</plurals>
Run Code Online (Sandbox Code Playgroud)

问题

对于法语和俄语,我得到了下一个警告:

数量"1"与此区域设置中的多个特定数字匹配,但该消息未包含格式化参数(例如%d).这通常是国际化错误.请参阅完整的问题解释.

当选择显示细节时,它说: 在此输入图像描述

很好,我不知道该怎么做才能解决它,如果有问题......

这个问题

我究竟应该用这些字符串做什么?我该怎么告诉翻译?

Ped*_*ira 5

我要写一个答案,因为这是一个相当困难的解释。

在各种语言中,以1结尾的名词使用单数形式。请参阅:http ://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html

用英语解释时,有些语言中“添加 1 张照片”和“添加 101 张照片”是正确的。注意“照片”。因此,这意味着您也应该始终在一个字符串上添加“%d”。Android 会选择最佳的使用场景。这意味着在英语中,它将为 > 1 的数字选择“other”,而在其他语言中,它将为以 1 结尾的数字选择“one”。

继续,将 %d 添加到您的一个字符串中,应该没问题。还要确保您的翻译人员遵守其语言的复数规则。

  • 仅仅因为这样说没问题并不意味着这是正确的方法。其他语言也是如此。我建议你也阅读http://cldr.unicode.org/index/cldr-spec/plural-rules (2认同)

Jas*_*ska 5

在法语中,当计数为 0 或 1 时使用单数形式。在英语中,仅当计数为 1 时使用单数形式。0 使用复数形式。

这就是您需要在法语单数模式中插入占位符 (%d) 的原因。

  • 我知道这是一个老问题,但为什么我需要将占位符添加到字符串中?对于其他语言环境,我不需要将它们放在那里,并且它们不在代码中使用。我不想仅更改一种(或多种)语言的其他语言环境和代码。如果我理解正确,为什么我不能将零项目数量添加到法语语言环境中?将占位符添加到字符串中是否有某种逻辑原因,或者这只是 Android Studio 的限制? (2认同)