Android會運行在許多地區的許多裝置上。為滿足大多數使用者的需要,應用程式應該使用與應用所在地區相適應的文本、音頻檔案、數字、貨幣符號、以及圖形等。
本文檔介紹Android應用程式本地化的最佳實務。這個原則適用於你正在使用的任何IDE開發工具,如帶有ADT的Eclipse、基於Ant的工具等。
首先要掌握Java的編程知識,並且熟悉Android的資源載入過程,以及XML中使用者介面元素的聲明方法。在開發方面要掌握Activity的生存周期以及國際化和本地化的一般原則。
使用Android資源架構把應用程式本地化的外觀儘可能的與核心Java功能分離,是一個良好的實踐。
1. 可以把大多數或所有的應用程式的使用者介面的內容放到資源檔中;
2. 使用者介面的行為,以及其他處理,是通過Java代碼來驅動的。如,如果使用者輸入的資料需要依賴不同的地區來格式化或排序,那麼就要使用Java代碼來編程處理這些資料。
概要:Android中的資源切換
資源是文本字串、布局、聲音、圖形以及Android應用程式中需要的其他待用資料。一個應用程式能夠包含多個資源集,每個都是針對不同的裝置配置來定製的。當使用者運行應用程式時,Android會自動的選擇並載入跟裝置最匹配的資源。
當編寫應用程式時,需要建立一組預設的資源,外加用於不同地區的可選資源。
當使用者運行應用程式時,Android系統會基於地區來選擇載入合適的資源。
在編寫應用程式時,要給應用程式建立預設和可選資源。對於這些建立的資源,要把它們放到res/目錄下,特定命名的子目錄中的檔案中。
為什麼預設資源是重要的?
當應用程式運行在一個沒有提供特定語言文本的語言環境中時,Android會從res/values/strings.xml中載入預設的字串。如果預設的檔案不存在,或者是缺少應用程式需要的字串,那麼應用程式就不會運行,並且會顯示一個錯誤。下面的樣本示範了當預設文字檔不完整時所發生的問題:
應用程式的Java代碼只引用了兩個字串,text_a和text_b。這個應用程式套件組合含了用英語定義的text_a和text_b的本地資源檔(res/values-en/strings.xml)。應用程式還包含了一個預設的資源檔(res/values/strings.xml),檔案中包含了text_a的定義,但沒有定義text_b。
1. 應用程式編譯時間可能不會有問題。像Eclipse這樣的IDE,如果資源有錯誤,它是不會報告任何錯誤的。
2. 當應用程式在設定了英語語言環境的裝置上啟動時,應用程式能夠正確運行,因為res/values-en/strings.xml中包含了它所需要的文本字串。
3. 但是,當應用程式在設定了英語以外的其他語言環境的裝置上啟動這個應用程式時,使用者會看到一個錯誤資訊和強制關閉按鈕。
要防止這種情況發生,必須確保res/values/strings.xml檔案存在,並且定義了每個需要字串。這適用於所有類型的資源,不只是字串。你要給應用程式需要的所有類型的資源建立預設資源檔,包括布局資源、可描畫資源、動畫資源等。