Quantity Strings(复数)

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

决定选择和使用某种语言和复数的规则是非常复杂的,所以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

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

示例

存放在res/values/strings.xmlXML文件:

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

<resources>

<pluralsname="numberOfSongsAvailable">

<itemquantity="one">One song found.</item>

<itemquantity="other">%d songs found.</item>

</plurals>

</resources>

存放在res/values-pl/strings.xmlXML文件:

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

<resources>

<pluralsname="numberOfSongsAvailable">

<itemquantity="one">Znaleziono jednąpiosenkę.</item>

<itemquantity="few">Znaleziono %d piosenki.</item>

<itemquantity="other">Znaleziono %d piosenek.</item>

</plurals>

</resources>

Java代码:

intcount=getNumberOfsongsAvailable();

Resourcesres=getResources();

StringsongsFound=res.getQuantityString(R.plurals.numberOfSongsAvailable,count,count);

在使用getQuantityString()方法时,如果字符串包含数字格式化串,则需要传递2count参数。例如:对于字符串%d songs found”,第一个count参数选择合适的复数字符串,第二个count参数插入占位符%d中。如果复数字符串资源不包含格式化信息,就不需要给getQuantityString()传递第三个参数。

原文:http://www.cnblogs.com/meiyitian/articles/2221742.html

更多相关文章

  1. 如何在程序中获取系统语言及修改Value-的语言
  2. From Android(安卓)to iOS - 零基础编写一个iOS应用
  3. Unity3D 与Android(安卓)相互传递消息
  4. 【xml String format】error: Multiple substitutions specified
  5. Android(安卓)NDK开发之旅37--FFmpeg转码压缩
  6. Android(安卓)常用代码集合
  7. Android Socket编程
  8. value-string
  9. Android(安卓)N之后 Webview导致多语言切换失效的问题

随机推荐

  1. 基于 Android NDK 的学习之旅-----环境搭
  2. Android开发环境的搭建
  3. [原创] Android Activity onNewIntent()
  4. EditText弹出软件盘时不进行全屏
  5. Android常用代码之普通及系统权限静默安
  6. 2.3.2EditText控件
  7. Android(安卓)MediaPlayer基本使用方式
  8. Android属性之build.prop,及property_get/
  9. Android - Android Studio 安装 及 设置
  10. Android(安卓)Studio 教程