文档章节

android 里的 plurals.xml getQuantityString 单复数资源选择

丁佳辉
 丁佳辉
发布于 2017/02/07 10:18
字数 1078
阅读 62
收藏 0

Quantity Strings(复数)

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

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

注意,要按照语法规则来建立可选项。在英语里,即使数量为0,字符串零(zero)也不需要建立。因为0在英语语法表达上和2没有区别,和其他除1以外的任何数字都没有差别("zero books", "one book", "two books",等等)。 不要被“two听起来似乎只能用于数量2” 样的事误导。某语言可能需要2、12、102(等等)和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

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

many

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

other

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

示例

存放在res/values/strings.xml 的XML文件:

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

<resources>

<plurals name="numberOfSongsAvailable">

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

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

</plurals>

</resources>

 

存放在res/values-pl/strings.xml 的XML文件:

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

<resources>

<plurals name="numberOfSongsAvailable">

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

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

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

</plurals>

</resources>

 

Java代码:

int count = getNumberOfsongsAvailable(); 

Resources res = getResources()

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

 

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

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

 

本文转载自:http://blog.csdn.net/ff313976/article/details/7439676

丁佳辉
粉丝 20
博文 434
码字总数 198765
作品 0
浦东
程序员
私信 提问
【我的Android进阶之旅】Android使用Quantity Strings来实现全球化的单复数功能

版权声明:本文为【欧阳鹏】原创文章,欢迎转载,转载请注明出处! 【http://blog.csdn.net/ouyang_peng】 https://blog.csdn.net/qq446282412/article/details/88529707 一、背景描述 之前A...

欧阳鹏
03/13
0
0
Android资源文件里复数使用

这个比较偏门,在英语系国家里有复数的概念,中文里则没有。 比如: Android可以把这种复数的操作预定义在strings文件里,具体如下: 在代码里,我们可以通过String pluralsText = getResourc...

fantasiter
2015/12/26
109
0
Android应用资源---字符串资源类型(String)

字符串资源给应用程序提供带有文本样式和格式选项的文本字符串。能够给应用程序提供三种类型的字符串资源: 1. String 提供单一字符串的XML资源。 2. String Array 提供一个字符串数组的XML...

长平狐
2012/10/16
2.6K
0
【百度AR】【Android】demo工程使用手记

【百度AR】【Android】demo工程使用手记 demo工程获取和注意事项 百度AR平台地址:https://ar.baidu.com/testapply 技术文档地址:https://ai.baidu.com/docs#/DuMixAR-Android-SDK/top AR内...

lichong951
2018/05/24
0
0
gen下R文件消失 && 工程无故报错

一、R文件失踪案 1. 背景: 前些时候,在进行Android程序开发过程中帮助同学修改xml代码时候,偶尔会出现R类文件离奇失踪事件,当时经过一些恢复操作无果后,只好重建一个工程。由于R类文件在...

zhengguogaun
2013/06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

从濒临解散到浴火重生,OceanBase 这十年经历了什么?

阿里妹导读:谈及国产自研数据库,就不得不提 OceanBase。与很多人想象不同的是,OceanBase 并非衔着金钥匙出生的宠儿。相反,它曾无人看好、困难重重,整个团队甚至数度濒临解散。 从危在旦...

阿里云云栖社区
19分钟前
1
0
比特币第三方API大全

在开发比特币应用时,除了使用自己搭建的节点,也可以利用第三方提供的比特币api,来获取市场行情、进行交易支付、查询账户余额等。这些第三方api不一定遵循标准的比特币rpc接口规范,但往往...

汇智网教程
30分钟前
1
0
Dozer:Dozer异常java.lang.ClassCastException

这个问题是个很难发现的问题,因为代码本身没有错误,但就是无法找到报错原因 现记录下这个报错 java.lang.ClassCastException:com.XXX.ObjectA cannot be cast to com.XXX.ObjectA 代码中并...

琴兽
今天
2
0
Feign Retryer的默认重试策略测试

1、Feign配置 @Configurationpublic class FeignConfig { @Value("${coupon_service.url:http://localhost:8081}") private String couponServiceUrl; @Bean publ......

moon888
今天
2
0
关于不同域名下的session共享问题

如果登录,首页,分类,列表,产品都在不同的二级域名下,主域名不变,一定要保证里面的版本问题,不能为了更新而更新,这样哪个下面的session都访问不了。

dragon_tech
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部