【移动开发】plurals
不同的语言对数量的语法规定有不同的规则。在英语里面,例如,1是特例。我们会直接写1book,而针对一个以上的我们会在book后加复数形式。这种区别对单数和复数来说是很普遍的,但是其他的语言做了更好的区分。对Android来说,它支持zero,one,two,few,many,和other。
对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法getQuantityString(),它可以用来为你选择合适的资源。
尽管历史上称为“数量字符”(在API里面还是这样称呼),数量字符应该仅仅用于plurals.如果把它用来解释当有未读邮件时,Gmail的Inbox为Inbox(12)这样的事情是不正确的。看起来,使用数量字符比使用if语句更方便,但是需要看到有些语言(例如中文)根本没有语法区别,所以你会一直得到other字符。[不懂]
选择使用哪个字符,唯一的取决于语法的要求。在英语里面,对零的字符将会被忽略,尽管数字是0,因为0从语法上来说跟2没有什么区别,其他数字也是一样,除了1("zero books","one book","two books",等等)
不要误认为,two sounds应该针对数字2:一种语言或许要求2,12,102等等都是一样的,但是跟别数字又不一样。取决于你的翻译者知道他们语言的真正区别。
It's often possible to avoid quantity strings by using quantity-neutral formulations such as "Books: 1". 如果你在你的应用里面保持这样的风格,这样将让你和你的翻译者的生活更简单。
Note:一个plural集合是一个简单的资源,它可以通过name的属性来访问(不是xml文件的name)。这样,你可以把plural资源和其他的简单资源一样放在同一个xml 文件里面,在同一个<resoures>节点下。
文件位置:
res/values/filename.xml
filename 是任意的。<plurals>节点的name将被作为resource ID.
资源访问:
在java里面:R.plurals.plural_name
语法:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <plurals
- name="plural_name">
- <item
- quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
- >text_string</item>
- </plurals>
- </resources>
节点:
<resources>
必须的节点。必须为根节点。
没有属性。
<plurals>
字符串的集合,提供取决于某类事物个数的字符串。包含一个或者多个<item>节点
-
属性:
-
name
字符串. A name for the pair of strings.这个name将被作为resource ID。
<item>
-
一个复数或者单数字符串。它的值可以是对其他字符串资源的一个引用。必须是<plurals> 的子节点。必须知道不要撇号和引号。可以参考下面的例子。
-
属性:
-
quantity
- 关键字.这个值反应了什么时候这个字符该被使用。正确的值,在括号里面有不详尽的例子:
Value Description zero
当语言需要特别对待0时(就想阿拉伯) one
当语言需要特别对待1(就像英语里和其他语言里的1;在russian,任何以1结尾但是不是以11结尾的也使用这种情况) two
当语言需要特别对待1(例如Welsh的2,或者Slovenian的102) few
当语言需要特别对待small(例如Czech的2,3,4;或者以2,3,4结尾但是不是12,13,14的Polisth) many
当语言需要特别对待large(例如Maltese的11-99) other
当语言没有要求对特定资源进行特殊对待(例如中国的所有数字,或者英语的42
- 关键字.这个值反应了什么时候这个字符该被使用。正确的值,在括号里面有不详尽的例子:
http://developer.android.com/guide/topics/resources/string-resource.html#Plurals
【移动开发】plurals的更多相关文章
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 使用HTML5开发Kinect体感游戏
一.简介 我们要做的是怎样一款游戏? 在前不久成都TGC2016展会上,我们开发了一款<火影忍者手游>的体感游戏,主要模拟手游章节<九尾袭来 >,用户化身四代,与九尾进行对决, ...
- Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记
以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...
- Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记
以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境
一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
- 读书笔记:《HTML5开发手册》--HTML5新的结构元素
读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...
随机推荐
- ●BZOJ 2752 [HAOI2012]高速公路(road)
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2752题解: 期望,线段树. 把每个路段看成一个点,那么对于l~R的操作,就可以转化为对l~r ...
- ●BZOJ 3512 DZY Loves Math IV
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3512 题解: $$求ANS=\sum_{i=1}^{N}\sum_{j=1}^{M}\phi ...
- STL注意比较函数
可重复插入?: set<int ,less_equal<int> >s; s.insert(10); s.insert(10); 第二次调用insert,集合回去确认10是否已 ...
- ●BZOJ 4289 PA2012 Tax
●赘述题目 算了,题目没有重复的必要. 注意理解:对答案造成贡献的是每个点,就是了. 举个栗子: 对于如下数据: 2 1 1 2 1 答案是 2: ●题解 方法:建图(难点)+最短路. 先来几个链接: ...
- 2015 多校联赛 ——HDU5371(manacher + 枚举)
Sample Input 1 10 2 3 4 4 3 2 2 3 4 4 Sample Output Case #1: 9 要求找出一段数字. 将其分成3部分,第①和第②部分成回文字串,第②和第 ...
- SpringBoot学习之集成mybatis
一.spring boot集成Mybatis gradle配置: //gradle配置: compile("org.springframework.boot:spring-boot-star ...
- python MySQLdb pymsql
参考文档 https://www.python.org/dev/peps/pep-0249/#nextset 本节内容 MySQLdb pymysql MySQLdb和pymysql分别为Pytho ...
- 笔记12 注入AspectJ切面
虽然Spring AOP能够满足许多应用的切面需求,但是与AspectJ相比, Spring AOP 是一个功能比较弱的AOP解决方案.AspectJ提供了Spring AOP所不能支持的许多类型的切 ...
- 实现鼠标双击(OnGUI)
void OnGUI()//实现鼠标双击 { Event Mouse = Event.current; if (Mouse.isMouse && Mouse.type == Event ...
- 深入分析synchronized的实现原理
基础概念 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时可以保证共享变量对内存可见性. Java中每一个对象都可以作为锁,这是synchronize ...