1. 程式人生 > >安卓app中國際化任何資源的方法

安卓app中國際化任何資源的方法

先說下國際化的問題。首先,一般認為所謂的國際化不包含邏輯的國際化,那麼國際化涉及到的內容就是與廣義上的使用者UI相關的,包括使用者能看到、聽到、摸到的東西。當然,摸到東西,一般在軟體層面就不探討了。所以,要國際化,那麼就要處理使用者能看到的和聽到的東西,包括了圖片、文字、音樂、音效。很多時候,這個範圍會被縮小一些,以降低複雜度。當然,無論如何,國際化的首要問題是解決多語言的問題。

在android系統上,有完整的解決國際化的方法,基本思路是以資原始檔的方式將需要國際化的內容隔離出來,而資源所處的資料夾的命名是和語言、國家/地區相關的。系統內部有一個對資源進行分層匹配的演算法,以達成使用者能夠看到與他的語言、地區等最匹配的資源。

下面大概說下開發中對各種資源的處理方法:

文字:一般就是用string.xml檔案了。為每一種語言建立一個values-**-r??資料夾,與此語言對應的string.xml放進去就行了。其中**是語言程式碼,??是國家/區域程式碼。有一個例外情況是美國英語,系統預設提供了目錄,但命名並未遵守這個規則,命名為en,而不是en-rUS。這些資源也是app可用的保底資源。

圖片:處理方法與文字相同,但是目錄用drawable-**-r??-%mdpi。其中%代表的是匹配解析度

音樂、音效等其它資源:比如還會包括app使用的本地網頁等。開發環境中並沒有針對這些資源提供單獨的國際化解決方案,但可以利用相同的思路來解決。一種方法是在assets目錄下用不同的目錄來儲存這些資源。這些資源需要手動判斷位置和裝載。

語言、國家/地區的選擇:多數情況下,採用預設的方法來處理,即app的語言/國家/區域跟隨系統設定值。但如果應用提供了系統所不能選擇的語言(比如,有些廠商的android手機只能選擇有限的幾種語言),這種方法就不奏效了。那麼,必須在app內部能夠選擇語言。

舉例:

對於一個支援3種語言:en-rUS(美國英語),zh-rCN(簡體中文),de-rDE(德國德語)的app而言,目錄結構可能是這樣的:

文字資源放在res下的

values

values-de-rDE

values-zh-rCN

這三個目錄中是與語言對應的string.xml檔案

圖片資源放在res的如下資料夾下:

drawable-hdpi

drawable-mdpi

drawable-xhdpi

drawable-xxhdpi

以上4個目錄存放英語使用的資源。

簡體中文使用的圖片資源放進res下的四個目錄:

drawable-zh-rCN-hdpi

drawable-zh-rCN-mdpi

drawable-zh-rCN-xhdpi

drawable-zh-rCN-xxhdpi

德文使用的圖片資源放在rs下的這四個目錄:

drawable-de-rDE-hdpi

drawable-de-rDE-mdpi

drawable-de-rDE-xhdpi

drawable-de-rDE-xxhdpi

上面涉及的是文字和圖片資源,系統會自動根據語言/國家/地區進行處理。系統不能自動處理的資源用下面的方法來解決。

其它需要國際化的資源放在assets目錄下,目錄結構是這樣的:

音樂檔案放在以下3個目錄:

assets/music/en

assets/music/zh-rCN

assets/music/de-rDE

音效檔案、網頁等等都可以按照同樣的方法來處理。比如對於網頁:

assets/page/en

assets/page/zh-rCN

assets/page/de-rDE

注意:目錄命名時,同一種語言的資源,目錄名要保持一致

最後一個問題是在app中如何引用這些系統不能自動處理的資源。方法很簡單:

在每中語言的string.xml中增加一個語言標記 <string name="language">??</string>,對於三種語言,分別是:

<string name="language">en</string>

<string name="language">zh-rCN</string>

<string name="language">de-rDe</string>

在需要載入music資源時,首先,獲取當前語言環境下的的語言標記,對於簡體中文,就是zh-rCN,那麼與中文相關的music資源就儲存在 assets/music/zh-rCN下,直接讀取檔案就行了。

就這樣的。