android-R.plurals

R.plurals

public static final class R.plurals 
extends Object 

java.lang.Object
   ↳ android.R.plurals


Summary


Public constructors

R.plurals()

Inherited methods

From class java.lang.Object



不同的语言对数量进行描述的语法规则也不同。比如在英语里,数量1是个特殊情况,我们写成“1 book”,但其他任何数量都要写成n books”。这种单复数之间的区别是很普遍的,不过其他语言会有更好的区分方式。Android支持的全集包括zeroone twofewmanyother

决定选择和使用某种语言和复数的规则是非常复杂的,所以Android提供了诸如getQuantityString()的方法来选择合适的资源。

注意,要按照语法规则来建立可选项。在英语里,即使数量为0,字符串零(zero)也不需要建立。因为0在英语语法表达上和2没有区别,和其他除1以外的任何数字都没有差别("zero books", "one book", "two books",等等)。 不要被two听起来似乎只能用于数量2” 样的事误导。某语言可能需要212102(等等)和1一样形式表示,而又与其他数的形式都不同。请依靠翻译人员来了解一下实际语言中的差别。

如果和应用程序的风格一致,常可以用诸如“Books: 1”的模糊数量形式来避免使用数量字符串。这会让你和翻译人员都轻松些。

注意:复数字符串是简单类型资源,是用名称(name)(而不是XML文件名)来直接引用的。因此,在一个XML文件里,可以把复数字符串资源和其他简单类型资源一起放在一个<resources>元素下。

 

文件位置

res/values/filename.xml

文件名可随意指定。<plurals>元素的名字name将被用作资源ID

 

资源引用

Java代码:R.plurals.plural_name

 

语法

<?xml version="1.0" encoding="utf-8"?> 

<resources>

<plurals

name="plural_name">

<item_plurals

quantity=["zero" | "one" | "two" | "few" | "many" | "other"

>text_string</item>

</plurals>

</resources>

 

元素

<resources>

必填项必须是根元素。

无属性。

 

<plurals>

一个字符串集,每个数量表示提供一个字符串。包含一个或多个<item>元素。

 

属性:

name

String类型。字符串对的名称。此名称将作为资源ID

<item>

一个单数或复数形式的字符串。可以是对其他字符串资源的引用。必须作为<plurals>元素的子元素存在。注意须对单引号和双引号进行转义。有关如何正确地样式化及格式化字符串,请参阅下文格式化和样式

 

属性:

quantity

关键字 表示要使用此字符串的数量值。以下是合法的值(括号内列出部分语言要求):

描述

zero

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

one

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

two

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

few

语言需要对较小数字进行特殊处理(比如捷克语里的234;或者波兰语里以234结尾但不是121314的数。)

many

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

other

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


例子:

xml文件在strings.xml文件中

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <plurals name="test_plurals">
        <item quantity="one">There is 1 egg.</item>
        <item quantity="other">There are %s egg.</item>
    </plurals>

</resources>

<span style="white-space:pre">		</span>// res.getQuantityString(),第一个参数为plurals的ID,第二参数为0,对应quantity的选择,由于有效的只有1和其他,则对应other,因此s1为There
		// are %d eggs.
		String s1 = getResources().getQuantityString(R.plurals.test_plurals, 0);
		Log.i("TAG", "s1:" + s1);
		// 第二个参数为1,对应one,即为There is 1 egg.
		s1 = getResources().getQuantityString(R.plurals.test_plurals, 1);
		Log.i("TAG", "s1:" + s1);
		s1 = getResources().getQuantityString(R.plurals.test_plurals, 2);
		Log.i("TAG", "s1:" + s1);
		// 第二个参数为0,对应other,第三个参数为2,是根据format对%d的填充,即为There are 0 eggs.
		s1 = getResources().getQuantityString(R.plurals.test_plurals, 0, "3");
		Log.i("TAG", "s1:" + s1);

		// 第二个参数为1,对应one,由于format没有需要填入,为There is 1 egg.
		s1 = getResources().getQuantityString(R.plurals.test_plurals, 1, 1);
		Log.i("TAG", "s1:" + s1);
		// 第二个参数为2,对应other,由于format有input,为There are 6 eggs.
		s1 = getResources().getQuantityString(R.plurals.test_plurals, 2, 6);
		Log.i("TAG", "s1:" + s1);

运行结果:

06-21 14:04:38.970: I/TAG(12010): s1:There are %s egg.
06-21 14:04:38.970: I/TAG(12010): s1:There are %s egg.
06-21 14:04:38.970: I/TAG(12010): s1:There are %s egg.
06-21 14:04:38.970: I/TAG(12010): s1:There are 3 egg.
06-21 14:04:38.970: I/TAG(12010): s1:There are 1 egg.
06-21 14:04:38.970: I/TAG(12010): s1:There are 6 egg.

在这里很奇葩,运行效果跟一般网上帖子不一样。这个是我亲自测。不知道为什么带一个参数的 一直输出是other的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值