你真的會用Android中Strings資源嗎

Android為了幫助開發(fā)者把應(yīng)用更方便發(fā)布給全球不同語言的人們使用,建議開發(fā)者在進(jìn)行開發(fā)時不要把UI呈現(xiàn)相關(guān)的文本內(nèi)容硬編碼,而是把內(nèi)容寫入到strings.xml中,這樣做更加靈活膊夹,也更方便翻譯成不同其他語言逝慧。下面通過一個案例來逐步介紹一下strings的用法昔脯。

基本用法

比如我想在我的應(yīng)用頁面上呈現(xiàn)一句話,叫“我想買一臺Kindle”笛臣,那就可以在strings.xml中加入如下:

<string name="buy_kindle">我想買一臺Kindle</string>

在需要使用該字符串的地方通過getString獲得后使用云稚。

getString(R.string.buy_kindle)

添加參數(shù)

現(xiàn)在你覺得這句話把買Kindle的數(shù)量寫死了,因為你在代碼中不同地方都用到了這句話沈堡,但所買的Kindle數(shù)量不一樣静陈。strings資源讓開發(fā)者可以自主在字符串的任何位置加上參數(shù),比如要解決這個問題,可以:

<string name="one">一</string>
<string name="buy_kindle">我想買%s臺Kindle</string>

在有參數(shù)的情況下可以通過如下方式傳入

getString(R.string.buy_kindle, getString(R.string.one))

如果你想在這句話中加入多個參數(shù)鲸拥,比如想說:“我想買一臺Kindle送給小明”拐格,而送給誰可以自定,則可以如下表達(dá)刑赶。

<string name="buy_kindle">我想買%1$s臺Kindle送給%2$s</string>
getString(R.string.buy_kindle, getString(R.string.one), getString(R.string.xiaoming))

注意在多個參數(shù)時禁荒,需要給參數(shù)加入位置信息,如上的%1$s角撞。后面加上的參數(shù)會根據(jù)位置信息對應(yīng)入號呛伴。具體做法如Java中的formatter方法一樣,請參考:
http://developer.android.com/reference/java/util/Formatter.html

國際化

比如想把這句話翻譯成英文谒所,你可以新創(chuàng)建一個英文的Values resource file热康,如下圖方式選擇:


Android Studio中創(chuàng)建圖示

翻譯成如下:

<string name="buy_kindle">I want to buy %1$s Kindle</string>

從中可以發(fā)現(xiàn)Kindle這個詞并沒有翻譯,Android中對無需翻譯的詞劣领,我們可以用<xliff:g>標(biāo)簽來標(biāo)注起來姐军,這樣我們把資源文件給他人或者使用Google Play自動翻譯服務(wù)時,對方就知道該部分無需翻譯尖淘。如下:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="buy_kindle">我想買%s臺<xliff:g id="Kindle">Kindle</xliff:g></string>

注意使用該標(biāo)簽時奕锌,先在資源之前加上命名空間:
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"。

TIPS:Google play控制臺提供APP TRANSLATION SERVICE的翻譯服務(wù)

帶數(shù)量判定的字符串

在翻譯成英語后村生,發(fā)現(xiàn)問題來了惊暴,如果我想表示買了多臺Kindle,但在英語語法中多臺Kindle需要用復(fù)數(shù)形式Kindles趁桃,這要如何做呢辽话?Android為這種情形提供了Plurals方法。

<plurals name="buy_kindle">   
    <item quantity="one">I want to buy a Kindle</item>    
    <item quantity="other">I want to buy some Kindles</item>
</plurals>

獲得該plurals方法如下卫病,第二參數(shù)傳入quantity油啤,系統(tǒng)會根據(jù)quantity來選擇對應(yīng)的顯示,該方法后也可以加入?yún)?shù):

getResources().getQuantityString(R.plurals.buy_kindle, 2)

中文部分可以改成:

<plurals name="buy_kindle">    
    <item quantity="one">我想買一臺<xliff:g id="Kindle">Kindle</xliff:g></item>    
    <item quantity="other">我想買幾臺<xliff:g id="Kindle">Kindle</xliff:g></item>
</plurals>

TIPS:關(guān)于Quantity String的更詳細(xì)說明請移步:
http://developer.android.com/guide/topics/resources/string-resource.html#Plurals

加入特殊字符

有些字符是沒有辦法在strings.xml里面直接寫的蟀苛,比如"<"益咬,">",但可以用它對應(yīng)的ASCII碼來替代進(jìn)行顯示帜平,比如要表達(dá):我想買一臺Kindle<$100>幽告,則可以:

<item quantity="one">我想買一臺<xliff:g id="Kindle">Kindle<$100></xliff:g></item> 

其中“<”的ASCII是&#060,“>”的是&#062罕模。更多特殊字符與ASCII對應(yīng)表可以查看:《常見字符與ASCII十進(jìn)制對應(yīng)表》

作者簡介
彭濤(@彭濤me) 致力于讓技術(shù)變得簡單而有趣
個人博客:http://pengtao.me, GitHub地址:https://github.com/CPPAlien

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末评腺,一起剝皮案震驚了整個濱河市帘瞭,隨后出現(xiàn)的幾起案子淑掌,更是在濱河造成了極大的恐慌,老刑警劉巖蝶念,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抛腕,死亡現(xiàn)場離奇詭異芋绸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)担敌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門摔敛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人全封,你說我怎么就攤上這事马昙。” “怎么了刹悴?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵行楞,是天一觀的道長脱货。 經(jīng)常有香客問我番刊,道長,這世上最難降的妖魔是什么奥裸? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任就轧,我火速辦了婚禮证杭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妒御。我一直安慰自己解愤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布乎莉。 她就那樣靜靜地躺著琢歇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梦鉴。 梳的紋絲不亂的頭發(fā)上李茫,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音肥橙,去河邊找鬼魄宏。 笑死,一個胖子當(dāng)著我的面吹牛存筏,可吹牛的內(nèi)容都是我干的宠互。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼椭坚,長吁一口氣:“原來是場噩夢啊……” “哼予跌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起善茎,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤券册,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烁焙,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡航邢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了骄蝇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膳殷。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖九火,靈堂內(nèi)的尸體忽然破棺而出赚窃,到底是詐尸還是另有隱情,我是刑警寧澤岔激,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布考榨,位于F島的核電站,受9級特大地震影響鹦倚,放射性物質(zhì)發(fā)生泄漏河质。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一震叙、第九天 我趴在偏房一處隱蔽的房頂上張望掀鹅。 院中可真熱鬧,春花似錦媒楼、人聲如沸乐尊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扔嵌。三九已至,卻和暖如春夺颤,著一層夾襖步出監(jiān)牢的瞬間痢缎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工世澜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留独旷,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓寥裂,卻偏偏與公主長得像嵌洼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子封恰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容