國際化是指應用程式運行時,可根據用戶端請求來自的省/地區、語言的不同而顯示不同的介面。例如,如果請求來自於中文作業系統的用戶端,則應用程式中的各種提示資訊錯誤和協助等都使用中文文字;如果用戶端使用英文作業系統,則應用程式能自動識別,並作出英文的響應。
引入國際化的目的是為了提供自適應、更友好的使用者介面,並不需要改變程式的邏輯功能。國際化簡稱I18N。
一個國際化支援很好的應用,在不同的地區使用時,會呈現出本地語言的提示。這個過程也被稱為本地化,簡稱L10N。
Java國際化的思路:
Java程式的國際化思路是將程式中的標籤、提示等資訊放在資源檔中,程式需要支援哪些國家、語言環境,就提供對應的資源檔。資源檔是key-value對,每個資源檔中的key是不變的,但value則隨不同的國家、語言而改變。
Java程式的國際化主要通過如下三個類完成:
① java.util.ResourceBundle : 用於載入國家、語言資源套件。
② java.util.Locale : 用於封裝特定的國家/地區、語言環境。
③ java.text.MessageFormat : 用于格式化帶預留位置的字串。
為了實現程式的國際化,必須先提供者所需要的資源檔。資源檔的內容是很多key-value對,其中key是程式使用的部分,而value則是程式介面的顯示字串。
資源檔的命名可以有如下三種形式:
① baseName_language_country.properties
② baseName_language.properties
③ baseName.properties
其中baseName是資源檔的基本名,使用者可以隨意指定。而language和country都不可隨意變化,必須是Java所支援的語言和國家。
Java支援的國家和語言:
事實上,Java不可能支援所有的國家和語言,如果需要擷取Java所支援的國家和語言,則可調用Locale類的getAvailableLocales( )方法,該方法返回一個Locale數組,該數組裡包含了Java所支援的國家和語言。
LocaleDemo.java :
public class LocaleDemo {public static void main(String[] args) {Locale[] locales=Locale.getAvailableLocales();for(int i=0;i<locales.length;i++){System.out.println(locales[i].getDisplayCountry()+"="+locales[i].getCountry()+" "+locales[i].getDisplayLanguage()+"="+locales[i].getLanguage());}}}