java.util.ResourceBundle使用詳解
一、認識國際化資源檔 這個類提供軟體國際化的捷徑。通過此類,可以使您所編寫的程式可以: 輕鬆地本地化或翻譯成不同的語言 一次處理多個語言環境 以後可以輕鬆地進行修改,支援更多的語言環境 說的簡單點,這個類的作用就是讀取資源屬性檔案(properties),然後根據.properties檔案的名稱資訊(本地化資訊),匹配當前系統的國別語言資訊(也可以程式指定),然後擷取相應的properties檔案的內容。 使用這個類,要注意的一點是,這個properties檔案的名字是有規範的:一般的命名規範是: 自訂名_語言代碼_國別代碼.properties,如果是預設的,直接寫為:自訂名.properties比如:myres_en_US.properties
myres_zh_CN.propertiesmyres.properties 當在中文作業系統下,如果myres_zh_CN.properties、myres.properties兩個檔案都存在,則優先會使用myres_zh_CN.properties,當myres_zh_CN.properties不存在時候,會使用預設的myres.properties。 沒有提供語言和地區的資源檔是系統預設的資源檔。資源檔都必須是ISO-8859-1編碼,因此,對於所有非西方語系的處理,都必須先將之轉換為Java Unicode Escape格式。轉換方法是通過JDK內建的工具native2ascii.
二、執行個體 定義三個資源檔,放到src的根目錄下面(必須這樣,或者你放到自己配置的calsspath下面。 myres.properties
aaa=good bbb=thanks
myres_en_US.properties
aaa=good bbb=thanks
myres_zh_CN.properties
aaa=\u597d bbb=\u591a\u8c22
import java.util.Locale; import java.util.ResourceBundle; /** * 國際化資源綁定測試 * * /** * 注意在我電腦上要想把漢字轉化為unicode碼必須開啟jdk安裝目錄下C:\Program Files\Java\jdk1.6.0_06\bin * 下的native2ascii.exe檔案,然後寫上漢字按斷行符號後就會產生unicode碼 * 不知道什麼原因,在我的電腦上在properties檔案目錄下產生的unicode碼是錯誤的,依然亂碼,只能通過第一種方式產生unicode碼 * * 注意既然是國際化,比方說中文和英文,那就是準備好兩份檔案, * 一份是myres_zh_CN.properties檔案,一份是myres_en_US.properties檔案 * @param args */*/ public class TestResourceBundle {
public static void main(String[] args) { Locale locale1 = new Locale("zh", "CN"); ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1); System.out.println(resb1.getString("aaa")); ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault()); System.out.println(resb1.getString("aaa")); Locale locale3 = new Locale("en", "US"); ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3); System.out.println(resb3.getString("aaa")); } }
運行結果:
好 多謝好 多謝good thanks
如果使用預設的Locale,那麼在英文作業系統上,會選擇myres_en_US.properties或myres.properties資源檔。 三、認識LocaleLocale 對象表示了特定的地理、政治和文化地區。需要 Locale 來執行其任務的操作稱為語言環境敏感的 操作,它使用 Locale 為使用者量身定製資訊。例如,顯示一個數值就是語言環境敏感的操作,應該根據使用者的國家、地區或文化的風俗/傳統來格式化該數值。 使用此類中的構造方法來建立 Locale: Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant) 建立完 Locale 後,就可以查詢有關其自身的資訊。使用 getCountry 可擷取 ISO 國家代碼,使用 getLanguage 則擷取 ISO 語言代碼。可用使用 getDisplayCountry 來擷取適合向使用者顯示的國家名。同樣,可用使用 getDisplayLanguage 來擷取適合向使用者顯示的語言名。有趣的是,getDisplayXXX 方法本身是語言環境敏感的,它有兩個版本:一個使用預設的語言環境作為參數,另一個則使用指定的語言環境作為參數。
語言參數是一個有效 ISO 語言代碼。這些代碼是由 ISO-639 定義的小寫兩字母代碼。在許多網站上都可以找到這些代碼的完整列表,如: http://www.loc.gov/standards/iso639-2/englangn.html。國家參數是一個有效 ISO 國家代碼。這些代碼是由 ISO-3166 定義的大寫兩字母代碼。在許多網站上都可以找到這些代碼的完整列表,如: http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html。
四、中文資源檔的轉碼 native2ascii 這個工具用法如下:如果覺得麻煩,可以直接將中文粘貼到裡面,斷行符號就可以看到轉碼後的結果了。 在我的電腦上不知道怎麼回事,第一種方式產生的unicode碼是錯誤的,還是亂碼,第二種方式可以產生正確的unicode碼 看明白這個了,就不在為struts等web架構的國際化而感到稀奇了。