[英]Quantity “two” not working in Android Strings-Resources Plural
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
版本,如果语言环境明确指定,应该有一个two
版本?
SO问题Android复数处理“零”在使用英语zero
也发现同样的错误,这也是不支持的。 除了避免我想要避免的Android复数之外,这个问题没有解决方案。
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允许您执行您的预期操作,则无法将您的应用程序正确地翻译成具有更复杂复数规则的任意数量的语言。
那是一个
老bug 。
PluralRules类的
相关代码部分中只有一些缺少if子句。
正如您在链接问题中的答案所述,使用
MessageFormat
或其他方法会更好。
该错误已于2010年5月报告,我不希望在不久的将来修复该问题
(在这种情况下,旧版设备上仍然存在故障版本) 。
完全错误,请参阅评论。
是的,使用2是特定于区域设置。 仅仅因为你给它2号并不意味着它将使用quantity =“two”。 它仅对具有2号特殊情况的语言使用该数量
来自http://developer.android.com/guide/topics/resources/string-resource.html#Plurals :
请注意,选择是基于语法上的必要性。 即使数量为0,也会忽略英语为零的字符串,因为0在语法上与2不同,或者除1以外的任何其他数字(“零书”,“一本书”,“两本书”等等)上)。 不要因为两个声音只能应用于数量2这一事实而被误导:一种语言可能要求2,12,102(等等)都被视为彼此相似但与其他不同数量。 依靠你的翻译来了解他们的语言实际上坚持的区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.