一、認識國際化資源文件
?
這個類提供軟件國際化的捷徑。通過此類,可以使您所編寫的程序可以:
???????? 輕松地本地化或翻譯成不同的語言
???????? 一次處理多個語言環(huán)境
???????? 以后可以輕松地進行修改,支持更多的語言環(huán)境
?
說的簡單點,這個類的作用就是讀取資源屬性文件(properties),然后根據(jù).properties文件的名稱信息(本地化信息),匹配當前系統(tǒng)的國別語言信息(也可以程序指定),然后獲取相應的properties文件的內(nèi)容。
?
使用這個類,要注意的一點是,這個properties文件的名字是有規(guī)范的:一般的命名規(guī)范是:
自定義名_語言代碼_國別代碼.properties
,
如果是默認的,直接寫為:
自定義名.properties
比如:
myres_en_US.properties
myres_zh_CN.properties
myres_zh_CN.properties
myres.properties
?
當在中文操作系統(tǒng)下,如果myres_zh_CN.properties、myres.properties兩個文件都存在,則優(yōu)先會使用myres_zh_CN.properties,當myres_zh_CN.properties不存在時候,會使用默認的myres.properties。
?
沒有提供語言和地區(qū)的資源文件是系統(tǒng)默認的資源文件。
資源文件都必須是ISO-8859-1編碼,因此,對于所有非西方語系的處理,都必須先將之轉(zhuǎn)換為Java Unicode Escape格式。轉(zhuǎn)換方法是通過JDK自帶的工具native2ascii.
?
二、實例
?
定義三個資源文件,放到src的根目錄下面(必須這樣,或者你放到自己配置的calsspath下面。
?
myres.properties
aaa=good
bbb=thanks
bbb=thanks
myres_en_US.properties
aaa=good
bbb=thanks
bbb=thanks
myres_zh_CN.properties
aaa=\u597d
bbb=\u591a\u8c22
bbb=\u591a\u8c22
?
import
java.util.Locale;
import java.util.ResourceBundle;
/**
* 國際化資源綁定測試
*
* @author leizhimin 2009-7-29 21:17:42
*/
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" ));
????????}
}
import java.util.ResourceBundle;
/**
* 國際化資源綁定測試
*
* @author leizhimin 2009-7-29 21:17:42
*/
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" ));
????????}
}
?
運行結(jié)果:
好
好
good
Process finished with exit code 0
好
good
Process finished with exit code 0
?
如果使用默認的Locale,那么在英文操作系統(tǒng)上,會選擇myres_en_US.properties或myres.properties資源文件。
?
三、認識Locale
Locale 對象表示了特定的地理、政治和文化地區(qū)。需要 Locale 來執(zhí)行其任務的操作稱為語言環(huán)境敏感的 操作,它使用 Locale 為用戶量身定制信息。例如,顯示一個數(shù)值就是語言環(huán)境敏感的操作,應該根據(jù)用戶的國家、地區(qū)或文化的風俗/傳統(tǒng)來格式化該數(shù)值。
?
使用此類中的構(gòu)造方法來創(chuàng)建 Locale:
?Locale(String language)
?Locale(String language, String country)
?Locale(String language, String country, String variant)
?Locale(String language, String country)
?Locale(String language, String country, String variant)
?
創(chuàng)建完 Locale 后,就可以查詢有關(guān)其自身的信息。使用 getCountry 可獲取 ISO 國家代碼,使用 getLanguage 則獲取 ISO 語言代碼。可用使用 getDisplayCountry 來獲取適合向用戶顯示的國家名。同樣,可用使用 getDisplayLanguage 來獲取適合向用戶顯示的語言名。有趣的是,getDisplayXXX 方法本身是語言環(huán)境敏感的,它有兩個版本:一個使用默認的語言環(huán)境作為參數(shù),另一個則使用指定的語言環(huán)境作為參數(shù)。
語言參數(shù)是一個有效的 ISO 語言代碼。這些代碼是由 ISO-639 定義的小寫兩字母代碼。在許多網(wǎng)站上都可以找到這些代碼的完整列表,如:
http://www.loc.gov/standards/iso639-2/englangn.html。????
國家參數(shù)是一個有效的 ISO 國家代碼。這些代碼是由 ISO-3166 定義的大寫兩字母代碼。在許多網(wǎng)站上都可以找到這些代碼的完整列表,如:
http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html。????
http://www.loc.gov/standards/iso639-2/englangn.html。????
國家參數(shù)是一個有效的 ISO 國家代碼。這些代碼是由 ISO-3166 定義的大寫兩字母代碼。在許多網(wǎng)站上都可以找到這些代碼的完整列表,如:
http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html。????
?
四、中文資源文件的轉(zhuǎn)碼 native2ascii
?
這個工具用法如下:
?
如果覺得麻煩,可以直接將中文粘貼到里面,回車就可以看到轉(zhuǎn)碼后的結(jié)果了。
?
看明白這個了,就不在為struts等web框架的國際化而感到稀奇了。
?
FROM:http://lavasoft.blog.51cto.com/62575/184605/
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
