android 里的 plurals.xml getQuantityString 单复数资源选择_weixin_33958585的博客-程序员秘密

技术标签: python  java  移动开发  

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

 

转载于:https://my.oschina.net/u/1177694/blog/833064

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33958585/article/details/92082684

智能推荐

理解Android Binder机制(1/3):驱动篇_binder_write_read_Omni-Space的博客-程序员秘密

Binder的实现是比较复杂的,想要完全弄明白是怎么一回事,并不是一件容易的事情。这里面牵涉到好几个层次,每一层都有一些模块和机制需要理解。这部分内容预计会分为三篇文章来讲解。本文是第一篇,首先会对整个Binder机制做一个架构性的讲解,然后会将大部分精力用来讲解Binder机制中最核心的部分:Binder驱动的实现。Binder机制简介Binder源自Be Inc公司开发

Python接受数据及简单数据类型转换_Code-GFX的博客-程序员秘密

Python接受数据及数据类型转换Python中通过input接受数据,接受的数据全为str类型,当接受的数据需要进行一定操作时,有可能因为类型的原因而报错,则需要将接受的数据转换为特定的数据类型password = input("请输入您的密码:")print(f'你输入的密码是{password}')print(type(password))Python的数据类型转换数据类型(数据)eval()num = 1num1 = 1.1str1 = '1.1'str2 = '(10,

C++ builder6 win10 安装问题及解决方法_一个充满激情的猴子的博客-程序员秘密

昨天公司新发的电脑,今天安装C++ builder6 但是出现了很多问题,故记录如下:1首先需要注册这个插件dclusr.bpk2下载MSCOMM32.OCX,然后用管理员权限注册3 注册MScomm控件   开始-》运行-》 regsvr32 MScomm32.ocx   如果在delphi中使用Mscomm控件出现如下错误提示:  “License information...

Algorithm——何为算法?_weixin_30872157的博客-程序员秘密

摘自:https://zh.wikipedia.org/wiki/算法  在数学和计算机科学/算学之中,算法/演算法/算则法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。  算法中的指令描述的是一个计算,当其运行时能从一个初始状态和初始输入(可能为空)开始,经过一系列有限...

普及一下IPTV行业_iptv中间件_躬行之的博客-程序员秘密

原文首发于微信公众号:躬行之(jzman-blog)机顶盒起源于 20 世纪 90 年代欧美国家,主要用于保护版权和收取收视费,有线电视台在电视机前加一个密钥盒。只有交了费的用户才能正常收看电视,这就是最初机顶盒的原型。后来随着互联网技术的不断发展出现了具备上网功能的机顶盒,但是市场反响一般。20 世纪 90 年代后期,随着美国和欧洲 DTV(数字电视)和 HDTV(高清晰度数字电视)试播之后,掀起了机顶盒发展的高潮,这次机顶盒的主要作用是普通模拟电视机收看数字电视或数字高清晰度电视,这种机顶盒就是.

使用urlrewrite 强制访问www打头的域名_weixin_34301307的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

随便推点

easyUI Datagrid 动态设置表头、获取数据、格式化数据、编辑数据并保存_easyui动态修改表头_yang11543的博客-程序员秘密

easyUI Datagrid 动态设置表头、获取数据、格式化数据、编辑数据并保存效果图:首先分析easyUI Datagrid 的columns 属性:[[{title: ‘字段名称’,field: ‘name’,width: 160,rowspan: 2,align: ‘center’,sortable: true}, {title: ‘字段名称’,field:...

Section 1.快速排序_Zenita的博客-程序员秘密

一、中心思想:分治确定分界点x:q[l],q[r],q[(l+r)\2],或者任取一点 调整区间,小于等于x的放在x左边,大于x的放在x右边 递归将左边和右边分别排好序二、核心内容:调整区间暴力做法:另建两个数组a[],b[] 对q[l]到q[r]扫描,小于等于x的丢到a,大于x的丢到b 先将a存进q,再接着存b虽然很不优雅,但是咱不差这内存,时间复杂度是一样的0.0优雅的做法:在l处和r处设置一个“指针”i,j 如果i处小于等于x,则i右移,直到i处大于x停下;然后判断.

【Python】网页记住的登录密码被泄露了,你知道么!---爬虫技术必修课审查元素_我在看图的博客-程序员秘密

前言随着互联网的到来,各种网站都要登录,各种账号要记住。记不住怎么办,很多人选择的网页保存登录账号密码,这其实是很不安全的,因为,只要一点点小手段就能轻松地查看你保存的账号密码。下面我们来看下是怎么一回事。这也是学习Python爬虫技术的一项必修课。审查元素在浏览器的地址栏输入URL地址,在网页处右键单击,找到检查。(作为一个程序员,我很负责任的告诉你,简单的敲一个...

2016 Top 10 Android Library__happyzhang的博客-程序员秘密

本文为 stormzhang 原创文章。过去的 2016 年,开源社区异常活跃,很多个人与公司争相开源自己的项目,让人眼花缭乱,然而有些项目只是昙花一现,有些项目却持久创造价值,为开发者提供了极大的便利,这些终究由时间来判断。今天,我就来整理一篇,我个人认为的 2016 年对 Android 开发有巨大帮助的,甚至改变了 Android 开发方式的开源库,但是,仅限个人认为,不具有任何

android 9.0 adb 应用安装过程_too many active sessions for uid 1000_kuangren987的博客-程序员秘密

引言最近手上有银联商务招标的需求,涉及到apk的验签策略,梳理一遍adb install的流程。每次看完源码,做完需求,后面就慢慢忘记代码流程了,遂写成博客记录下来。流程图开始写博客,不太会使用Flowchart流程图,从博友那借用了一张。c++到java的流程没看懂,流程图有点对不上android9.x的流程,将就着看吧。出处:https://blog.csdn.net/chishi199433/article/details/103925833(侵权必删)adb inatsll ***.

Python 玩转百万级游戏数据(附练手源数据)_输出游戏玩家功力值python_爬遍天下无敌手的博客-程序员秘密

今天分享的一个实战案例是关于游戏行业的,数据量级比较大,数据包含近229万条记录和 109个字段,以下取较重要的字段进行说明。相关数据已经给大家打包好,感兴趣的同学后台回复 “游戏数据”,即可获取完整数据集,做更多有趣探索分析。字段说明user_id:用户编码,用户唯一标识 bd_stronghold_level:要塞等级,相当于游戏账号等级 wood_reduce_value:木头消耗数量 stone_reduce_value:石头消耗数量 ivory_reduce_val...

推荐文章

热门文章

相关标签