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热康,如下圖方式選擇:
翻譯成如下:
<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是<,“>”的是>罕模。更多特殊字符與ASCII對應(yīng)表可以查看:《常見字符與ASCII十進(jìn)制對應(yīng)表》
作者簡介
彭濤(@彭濤me) 致力于讓技術(shù)變得簡單而有趣
個人博客:http://pengtao.me, GitHub地址:https://github.com/CPPAlien