android 复数资源,转:android 对字符串单复数显示处理

对于个数,中文在单复数是没有区别的,所以我们平时开发中也不会注意到这个问题,但是别的语言中常常单复数有不同的表示。当App实现国际化功能后字符串的单复数问题越来越明显。以英文为例,在处理个数的时候单复数是不同形的,例如:

中文:1分钟,2分钟,…, n分钟

英文:1 minute,2 minutes,…,n minutes

面对这个问题,最初我想到的解决办法是minute(s),用这个(s)来笼统的代替,但是看起来还是怪别扭的,并且有些特殊的名词的复数形式不是简单加个s。

第二个方法是在代码逻辑里判断

if(英语){

if(单数){

...

}else{

...

}

}

1

2

3

4

5

6

7

但是不觉得这种方法实在太蠢了吗,我们难道要在代码中根据不同国家的语言使用if语句来进行各种判断,适配相应的字符串,可想而知这些工作都是极其枯燥。

幸好android系统提供了getQuantityString()为我们解决这类问题,通过getQuantityString()自动选择合适的资源,无需在代码层做选择和使用某种语言和复数规则的复杂判断,只需要在资源文件string.xml中定义好相应的字符串。下面具体介绍其使用方法。

中文的字符串集

在res/values/string.xml中

%d 分钟

1

2

3

4

5

6

英文的字符串集

在res/values-en/string.xml中

%d minute

%d minutes

1

2

3

4

5

6

7

是定义资源的所在根。

字符串的集合,包含用来修饰不同数量的字符串。它可以包含一个或多个元素。name是资源的名称,name在代码中以reousrce id方式被引用。

表示单一或多个 数量的字符串。其中的值可以是其它字符串的引用。

属性:quantity 数量表征的值,由此确定引用哪个字符串。(括号内列出部分语言要求):

值    描述

zero    语言需要对数字0进行特殊处理。(比如阿拉伯语)

one    语言需要对类似1的数字进行特殊处理。(比如英语和其它大多数语言里的1;在俄语里,任何以1结尾但不以11结尾的数也属于此类型。)

two    语言需要对类似2的数字进行特殊处理。(比如威尔士语)

few    语言需要对较小数字进行特殊处理(比如捷克语里的2、3、4;或者波兰语里以2、3、4结尾但不是12、13、14的数。)

many    语言需要对较大数字进行特殊处理(比如马耳他语里以11-99结尾的数)

other    语言不需要对数字进行特殊处理。

Java代码:

int count = getCount();

Resources res = getResources();

String songsFound = res.getQuantityString(R.plurals.wastetime, count,count);

1

2

3

注意:在使用getQuantityString()方法时,如果引用的字符串包含%d的字符串格式,需要向方法内传输两次count。在上面例子中,第一次传入的参数count是为plural提供数量quantity作判断的,你第二次传入的count是插入到%d的占位符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值