JAVA由於採用unicode編碼,因此i18n(即internation,國際化)比較方便。下面實現一個能根據作業系統的預設地區選擇顯示字元的button,來說明java怎樣方便地實現本地化。
基本思路是將button上要顯示的字元與一個本地化資訊的專用資源包聯絡起來。資源套件的建立使用java.util.ResourceBundle類。資源套件一般利用靜態getBundle()方法得到。getBundle()方法的函式宣告如下:
public static final ResourceBundle getBundle(String baseName,Locale locale);
其中baseName表示的本地化資訊設定檔的基本名,比如建立中文簡體的本地化資訊設定檔,在應用程式的檔案夾下建立一個文字檔localeInfo_zh_CN.properties,其中localeInfo為資訊設定檔的基本名,zh是語言代碼中文簡體,CN是國家代碼中國。若要支援英文,再建立一個文字檔localeInfo_us_EN.properties。利用文本建立資訊配置的好處是修改顯示資訊時不用編譯,而且可以很方便地添加更多的本地資源資訊。localeInfo_zh_CN.properties的內容如下:
label1 = 按鈕一
label2 = 按鈕二
相應地,localeInfo_us_EN.properties的內容如下:
label1 = button one
label2 = button two
然後一定要記住用j2sdk的native2ascii工具將文字檔轉化為ascii碼,不然非英文的資訊就將顯示為亂碼。localeInfo_zh_CN.properties轉化為ascii後的內容如下:
label1 = /u6309/u94ae/u4e00
label2 = /u6309/u94ae/u4e8c
locale是一個Locale類,此類代表了特定的地理,政治或文化地區。可以通過new Locale(String language,String country)來建立,此 構 造 函 數 第 一 個 參 數 是ISO-639 中 定 義 的 語 言 代 碼(http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt); 第 二 個 參 數 為ISO-3166 中 定 義 的 國 家 代 碼(http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html)。比如中國簡體中文的Locale類可以通過zhLocale = new Locale("zh","CN");建立。
於是我們就可以利用ResourceBundle bundle = ResourceBundle.getBundle("languageInfo",Locale.getgetDefault());建立本地化資源資訊包,其中Locale.getgetDefault()是擷取作業系統預設地區的靜態方法。
然後利用語句JButton b1=new JButton(bundle.getString("label1"));
JButton b2 = new JButton(bundle.getString("label2"));將按鈕b1,b2與資源資訊包中相應的索引值對應起來。這樣,當應用程式在預設地區為中文的作業系統上運行時,按鈕b1顯示為“按鈕一”,b2顯示為“按鈕二”;在英文作業系統上運行時,相應顯示為“button one”,"button two"。
也可以人為地設定預設地區,利用Locale.setDefault(zhLocale);語句就可將預設地區設定為剛才建立的中國簡體中文zhLocale。