Android res-values-plurals


plurals 直译就是『复数』,在Android的资源文件中就是用来操作复数的

当目标语言需要对一个或多个特定数字值进行特殊处理时,就可以用到plurals了。

比如定义一个英语的资源文件:

1
2
3
4
5
6
<resources>
<plurals name="orangeCount">
<item quantity="one">only one orange</item>
<item quantity="other">there are %d oranges</item>
</plurals>
</resources>

关于quantity的取值范围解释:

zero 语言需要对数字0进行特殊处理。(比如阿拉伯语)
one 语言需要对类似1的数字进行特殊处理。(比如英语和其它大多数语言里的1;在俄语里,任何以1结尾但不以11结尾的数也属于此类型。)
two 语言需要对类似2的数字进行特殊处理。(比如威尔士语)
few 语言需要对较小数字进行特殊处理(比如捷克语里的2、3、4;或者波兰语里以2、3、4结尾但不是12、13、14的数。)
many 语言需要对较大数字进行特殊处理(比如马耳他语里以11-99结尾的数)
other 语言不需要对数字进行特殊处理。

将上面的资源文件定义到 res/values-en/plurals.xml。

代码中调用:

1
2
3
4
String other = getResources().getQuantityString(R.plurals.orangeCount, 0, 10);
System.out.println(other);
String one = getResources().getQuantityString(R.plurals.orangeCount, 1);
System.out.println(one);

测试系统语言,设置成英语。

运行后,输出:

1
2
there are 10 oranges
only one orange

getQuantityString方法的参数解释:第一个为资源id;第二个传入一个数字,用于匹配目标语言中有特殊处理的数量值,特定数量值需要在资源文件中配置好,其它数量就对应资源配置中的quantity=other 选项;第三个参数,非必须,只有在对应配置项中,有数值的formatString(即%d)时,才需要

------ 本文结束 ------

版权声明
协议:No Fuck License

stone 创作并维护
本文首发于 stone世界 博客( http://stone86.top
版权所有,侵权必究。如要转载,请声明出处

Fork me on GitHub