Android允许翻译人员定义Plurals。以下示例适用于我的语言环境'en':
<plurals name="numberOfSongsAvailable">
<item quantity="one">One song found.</item>
<item quantity="other">%d songs found.</item>
</plurals>
但是为two
添加特殊值不起作用,仍然会采用other
版本。 two
的用法是否取决于区域设置?那么,如果语言环境明确指定应该有two
版本,那么Android只会采用two
版本吗?
SO问题Android plurals treatment of “zero”在使用英语zero
时也发现同样的错误,但也不支持。除了避免我想要避免的Android复数之外,这个问题没有解决方案。
答案 0 :(得分:10)
Android正在使用CLDR复数系统,这不是它的工作原理(所以不要指望这会改变)。
此处描述了系统:
http://cldr.unicode.org/index/cldr-spec/plural-rules
简而言之,重要的是要理解“一个”并不代表数字1.相反,这些关键字是类别,属于每个类别的特定数字n由CLDR数据库中的规则定义:
http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
虽然似乎没有语言对0以外的任何内容使用“零”,但有些语言将0分配给“1”。当然有很多情况下“两个”包含的其他数字不仅仅是2个。
如果Android允许您执行您的预期操作,则无法将您的应用程序正确翻译为任何数量的复杂多语言语言。
答案 1 :(得分:3)
那是old bug。 relevant code section of the PluralRules class中只有少数if-clauses缺失。 击>
正如您所链接问题中的答案所述,您最好使用MessageFormat
或其他内容。该错误已于2010年5月报告,我不希望在不久的将来修复该错误(在这种情况下,旧版设备上仍然存在错误版本)。
击>
完全错误,请参阅评论。
答案 2 :(得分:2)
是的,使用两个特定于区域设置。仅仅因为你给它2号并不意味着它将使用quantity =“two”。它仅对具有数字2的特殊情况的语言使用该数量
来自http://developer.android.com/guide/topics/resources/string-resource.html#Plurals:
请注意,选择是基于语法上的必要性。即使数量为0,也会忽略英语为零的字符串,因为0在语法上与2不同,或者除1以外的任何其他数字(“零书”,“一本书”,“两本书”等等)上)。不要因为两个声音只能应用于数量2这一事实而被误导:一种语言可能要求2,12,102(等等)都被视为彼此相似但与其他不同数量。依靠你的翻译来了解他们的语言实际上坚持的区别。