android 裏的 plurals.xml getQuantityString 單複數資源選擇

Quantity Strings(複數)html

不一樣的語言對數量進行描述的語法規則也不一樣。好比在英語裏,數量1是個特殊狀況,咱們寫成「1 book」,但其餘任何數量都要寫成「n books」。這種單複數之間的區別是很廣泛的,不過其餘語言會有更好的區分方式。Android支持的全集包括zero、one、 two、few、many和other。android

決定選擇和使用某種語言和複數的規則是很是複雜的,因此Android提供了諸如getQuantityString()的方法來選擇合適的資源。ios

注意,要按照語法規則來創建可選項。在英語裏,即便數量爲0,字符串零(zero)也不須要創建。由於0在英語語法表達上和2沒有區別,和其餘除1之外的任何數字都沒有差異("zero books", "one book", "two books",等等)。 不要被「two聽起來彷佛只能用於數量2」 樣的事誤導。某語言可能須要二、十二、102(等等)和1同樣形式表示,而又與其餘數的形式都不一樣。請依靠翻譯人員來了解一下實際語言中的差異。ide

若是和應用程序的風格一致,常能夠用諸如「Books: 1」的模糊數量形式來避免使用數量字符串。這會讓你和翻譯人員都輕鬆些。ui

注意:複數字符串是簡單類型資源,是用名稱(name)(而不是XML文件名)來直接引用的。所以,在一個XML文件裏,能夠把複數字符串資源和其餘簡單類型資源一塊兒放在一個<resources>元素下。spa

 

文件位置.net

res/values/filename.xml翻譯

文件名可隨意指定。<plurals>元素的名字name將被用做資源ID。orm

 

資源引用xml

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

語言須要對較小數字進行特殊處理(好比捷克語裏的二、三、4;或者波蘭語裏以二、三、4結尾但不是十二、1三、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

相關文章
相關標籤/搜索