不同的语言对数量的定义有不同的语法规则。例如,在英语中,1个指的是一种特殊情况。其他时候我们说n个。这种单数和复数的情况非常的普通。但其他语言却有明显的区别。Android中设置了0,1,2,"很少",“许多”和“其他”做为数量表述。
对于给定的语言和数量,决定使用那种情况是非常的困难和复杂的。Android提供了getQuantityString()来帮助我们决定选择适当的资源。
语法:
<span class="pun"><?</span><span class="pln">xml version</span><span class="pun">=</span><span class="str">"1.0"</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pun">?></span><span class="pln"> </span><span class="tag"><</span><a target=_blank href="http://developer.android.com/guide/topics/resources/string-resource.html#plurals-resources-element"><span class="tag">resources</span></a><span class="tag">></span><span class="pln"> </span><span class="tag"><</span><a target=_blank href="http://developer.android.com/guide/topics/resources/string-resource.html#plurals-element"><span class="tag">plurals</span></a><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"</span><em><span class="atv">plural_name</span></em><span class="atv">"</span><span class="tag">></span><span class="pln"> </span><span class="tag"><</span><a target=_blank href="http://developer.android.com/guide/topics/resources/string-resource.html#plurals-item-element"><span class="tag">item</span></a><span class="pln"> </span><span class="atn">quantity</span><span class="pun">=</span><span class="atv">["zero"</span><span class="pln"> | </span><span class="atv">"one"</span><span class="pln"> | </span><span class="atv">"two"</span><span class="pln"> | </span><span class="atv">"few"</span><span class="pln"> | </span><span class="atv">"many"</span><span class="pln"> | </span><span class="atv">"other"</span><span class="pln">] </span><span class="tag">></span><em><span class="pln">text_string</span></em><span class="tag"></item></span><span class="pln"> </span><span class="tag"></plurals></span><span class="pln"> </span><span class="tag"></resources></span>
文件位置:res/values/filename.xml
如何引用:R.plurals.plural_name
例子:
<? 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>
不同的语言对数量的语法规定有不同的规则。在英语里面,例如,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>
必须的节点。必须为根节点。
没有属性。
- <?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>
- <pre class="java" name="code">int count = getNumberOfsongsAvailable();
- Resources res = getResources();
- String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);</pre><pre class="java" name="code"> </pre>
- <pre></pre>
- <br>
- <pre class="java" name="code">int count = getNumberOfsongsAvailable();
- Resources res = getResources();
- String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);</pre>
- <p><br>
- </p>
- <p> </p>