android 動態載入 語言xml 實現國際化

來源:互聯網
上載者:User

使用本地化的資源

如何建立預設資源

把應用程式的預設文本放到下面位置和名稱的一個檔案中:

res/values/strings.xml

在res/values/strings.xml中的文本字串應該使用預設的語言,這種語言是期望大多數應用程式使用者會說的語言。

必須設定的預設資源還包括其他的任何可描畫資源和布局資源,以及動畫資源。

res/drawable/(這個目錄中至少要包含一個圖形檔案http://www.mianfeiyuanma.com/ ,用於Android啟動應用的表徵圖)

res/layout/(這個目錄存放定義預設布局的XML檔案)

res/anim/(如果需要,可以有任意個res/anim-<qualifiers>檔案夾)

res/xml/(如果需要,可以有任意個res/xml-<qualifiers>檔案夾)

res/raw/(如果需要,可以有任意個res/raw-<qualifiers>檔案夾)

提示:在代碼中,檢查每個引用的Android資源。確保每個資源都有預設的資源定義,還要確保預設字串檔案的完整性,本地化字串檔案可以是全部字串的一個子集,但預設字串檔案必須要包含全部字串。

如何建立可選資源

本地化應用程式的大部分工作是給不同的語言提供可選的文本。在某些情況下,還需要提供可選的圖形、聲音、布局以及其他特定環境的資源。

應用程式能夠用不同的限定符指定許多res/<qualifiers>/目錄。使用特定語言或語言加地區的組合限定符,能夠給不同的語言環境建立可選資源。(資來源目錄的名稱必須是在“提供可選資源”文檔中介紹的命名方案,否則不會被編譯。)

例如:

假設應用程式的預設語言是英語。還假設要把應用程式中的文本本地化為法語,並且還想要應用程式適用於日語環境(除了應用程式的標題以外)。這時需要建立三個可替代的strings.xml檔案,每個檔案被儲存在指定的資來源目錄中:

1. res/values/strings.xml:包含應用程式使用的所有的英語文本,包括標題的命名文本。

2. res/values-fr/strings.xml:包含字串的所有法語文本,包含標題。

3. res/values-ja/strings.xml:包含除了標題以為的所有字串的日語文本。

如果Java代碼中應用了R.string.title資源,在運行是會發生下面的情況:

1. 如果裝置被設定成法語以外的其他任意語言,那麼Android會從res/values/strings.xml檔案中載入標題。

2. 如果裝置被設定成法語語言環境,那麼Android就會從res/values-fr/strings.xml檔案中載入標題。

要注意的是,如果裝置是日語環境,那麼Android會首先從res/vaues-ja/strings.xml檔案中尋找標題,但是因為這個檔案中沒有包含標題字串,所以Android會返回時用預設的標題,即從res/values/strings.xml檔案中載入標題資源。

Android會優先選擇哪個資源?

如果有多個資源檔跟裝置配置匹配,Android會使用下列規則來決定使用哪個資源檔。其中有的在資來源目錄名中指定了限定符,語言環境幾乎始終是要優先選擇的。

例如:

假設應用程式套件組合含了一個預設的圖形集和兩組其他圖形,每組都被最佳化用於不同的裝置:

1. res/drawable/:包含預設圖形。

2. res/drawable-small-land-stylus/:包含了用於手寫筆輸入和OVGA低密度橫向螢幕裝置的圖形。

3. res/drawable-ja/:包含了適用於日語環境的圖形。

如果應用程式運行在配置了日語環境的裝置上,那麼即使是裝置期望使用手寫筆,並且螢幕是QVGA的低密度螢幕,那麼Android也會從res/drawable-ja/目錄中載入圖形。

例外:只有MCC(移動國家代碼)和MNC(移動網路代碼)限定符的優先順序要高於語言環境。

例如:

假設下列情境:

1. 應用程式的代碼調用R.string.text_a

2. 有兩個可以利用資源:

res/values-mcc404/strings.xml,註冊碼它包含了text_a在英語環境中,應用程式中的預設語言。

res/values-hi/strings.xml,它包含了text_a在印度語中的字串。

3. 應用程式運行在下列配置的裝置上:

SIM卡被串連到印度的移動網路(MCC 404)。

語言環境被設定為印度語(hi)。

即使裝置被配置成印度語,Android系統也會從res/values-mcc404/strings.xml(英語資源)中載入text_a。這是因為資源選擇的過程中,MCC的優先順序要比語言的優先順序高。

選擇的過程不總是像這個例子這樣直截了當。詳細內容請閱讀“Android應用資源---訪問資源”一節中的“如何尋找和匹配最佳資源”。所有的限定符都在“Android應用資源---提供資源”一節中的表2中進行了說明。

在Java代碼中引用資源

在應用程式的Java代碼中,引用資源的文法是:R.resource_type.resource_name或android.R.resource_type.resource_name(Android系統資源)。

本地化策略

設計可以在任何語言環境中工作的應用程式

不能假設應用程式所啟動並執行裝置上的任何事情。裝置可能有你所不期望的硬體,或者設定了你計劃外或沒有測試過的語言環境。因此要進行程式設計,以便不管它在什麼樣裝置上都能正常的運行或友好的失敗。

重要:確保應用程式套件組合含所有預設資源集。

確保包括了含有應用程式需要的所有圖片和文本的res/drawable/和res/values/檔案夾(在檔案夾名稱中不帶有任何其他修飾)。

如果應用程式遇到了即使是一個預設資源錯誤,它也不會在那個不支援的裝置環境上運行。例如,res/values/strings.xml預設檔案可能缺少一個應用程式需要的字串,在應用程式運行在一個不支援的語言環境中,並且試圖載入res/values/strings.xml檔案時,使用者會看到一個錯誤訊息和一個強制關閉按鈕。項Eclipse這樣的IDE不會發現這類錯誤,在被支援語言環境的裝置或模擬器上測試時,不會發現這個問題。

設計靈活的布局

如果為了適應某種語言(如用長單詞的德語),需要重排布局,那麼可以為這種語言創鍵一個可選的布局(如,res/layout-de/main.xml)。但是,這樣做會使應用程式更難維護。更好的辦法是建立一個更靈活的單一布局。

另一種典型的情況是由於語言的差異對布局的不同需求。如,當應用程式運行在日語環境中時,需要一個包含了兩個名稱欄位的通訊錄格式,而運行在其他的一些語言中時,需要三個名稱欄位。有兩種方法可以處理這種情況:

1. 建立一個帶有三個欄位的布局,然後基於語言環境,用編程的方法啟用或禁用其中一個名稱欄位。

2. 建立一個主布局,主布局中含有包含了另一個可變欄位的子布局。第二個布局能夠針對不同的語言進行不同的配置。

避免建立多餘的資源檔和文本字串

在應用程式中不可能給每種資源都建立特定語言環境的可選資源。如,定義在res/layout/main.xml檔案中的布局可以在任何語言環境中工作,因此沒有必要給任何語言環境都建立可選的布局資源檔。

還有,可能不需要給每個字串都建立可選的文本。如,假設下列情況:

1. 應用程式的預設語言是美式英語。應用程式使用的每個字串都使用美式英語的拼字,它們被儲存在res/values/strings.xml檔案中。

2. 對於一些重要的短語,想要提供英式英語拼字。以便應用程式運行在英國的裝置上時使用這些可選資源。

要做這件事情,需要建立一個叫做res/values-en-rGB/strings.xml的小檔案,其中只包含了與在美國運行時不同的字串。其餘所有的字串,應用程式都會使用被定義在res/values/strings.xml檔案中的預設字串。

使用Android的Context對象手動的尋找裝置的語言環境

可以使用Android提供的Context對象來尋找裝置的語言環境:

String locale= context.getResources().getConfiguration().locale.getDisplayName();

synchronized static void setDefault(Locale locale)Overrides the default locale.

REFERENCES:http://hi.baidu.com/oxise3q/blog/item/c1eb290c030285cc08fa939d.html

 

 

REFERENCES;http://zhiwenweb.cn/jszx/bckf/ydkf/android/201110/30548.html

 

http://yueguc.iteye.com/blog/1125444

http://android.tgbus.com/Android/tutorial/201104/347992.shtml

http://hi.baidu.com/hsbd2005/item/ed700cce4cf7803e4494160e

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.