國際化的英文為Internationalization,這個也太長了,所以它又稱為I18n(英文單詞 internationalization的首末字符i和n,18為中間的字符數)。
- i18n支持多種語言,但是同一時間只能是英文和一種選定的語言,例如英文+中文、英文+德文、英文+韓文等等;
- L10n(localization),支持2種語言,英文和另外一種語言(例如中文);
- g11n(globalization),簡單的理解可以認為g11n = i18n + L10n。
- m17n(multilingualization)可以在同一時間支持多種語言,例如你可以在一個頁面里看到中文、英文、德文和韓文。
為了使不同國家地區的人使用到適應他們環境和語言的軟件或網站,國際化成為了Java的必要因素之一。
國際化機制在軟件開發過程中,使得軟件與特定的語言或地區脫鈎。當我們做的軟件被移植到其他國家時,不必更改軟件本身的代碼就可以適應當地區的使用了,所以,國際化是必須的。
那么在Java中如何實現國際化呢?
通過學習后,我也了解了一些必要的入門知識。
首先,我們可以通過測試代碼獲得本機操作系統的默認語言和區域。
查看默認語言和區域:
測試代碼:
1 /** 2 * @author 巨亞紅 3 * @date 2014-3-18 下午2:47:06 4 * @版本 V1.0 作者: 時間: 修改: 5 * @param args 6 */ 7 public static void main(String[] args) { 8 Locale defaultLocale=Locale.getDefault(); 9 System.out.println("country="+defaultLocale.getCountry()); 10 System.out.println("language="+defaultLocale.getLanguage()); 11 }
測試結果:
如果將默認地區修改為美國的話,測試結果為:
我們需要將硬編碼文本轉移到外部的資源文件里,建立兩個國際化資源文件:
名稱=基本名稱+Locale
1、設置資源文件。
MessgesBundle_en_US.properties:
k1=hello
k2=good bye
MessgesBundle_zh_CN.properties:
k1=\u4F60\u597D
k2=\u518D\u89C1
2、利用ResourceBundle.getBundle(baseName, locale)來找到MessgesBundle_en_US.properties文件。
ResourceBundle rb=ResourceBundle.getBundle("MessgesBundle", defaultLocale);
3、拿到k1和k2的value值。
System.out.println("k1="+rb.getString("k1"));
System.out.println("k2="+rb.getString("k2"));
結果是:
當前的地區設置成為英語(美國):
當前的地區設置成為中文(簡體,中國):
4、占位符的使用。
設置當前Locale
//Locale currentLocale=new Locale("zh", "CN"); Locale currentLocale=new Locale("en", "US");
添加占位符:
利用類MessageFormat
1 Locale currentLocale=new Locale("en", "US"); 2 ResourceBundle rb=ResourceBundle.getBundle("MessgesBundle", currentLocale); 3 MessageFormat mf=new MessageFormat(rb.getString("k1")); 4 System.out.println("k1="+mf.format(new Object[]{"Jessica"}));
結果為:
如果改成中文:
1 Locale currentLocale=new Locale("zh", "CN"); //中文 2 ResourceBundle rb=ResourceBundle.getBundle("MessgesBundle", currentLocale); 3 MessageFormat mf=new MessageFormat(rb.getString("k1")); 4 System.out.println("k1="+mf.format(new Object[]{"巨亞紅"}));
結果為:
5、設置缺省國際化資源文件。
上面中我們設置的兩個Locale已有資源文件,但是如果我們隨便設置一個Locale,如果沒有它對應的資源文件怎么辦?那么就需要設置一個缺省的國際化資源文件了。只要添加一個名為MessgesBundle.properties的資源文件可以了,在里面進行相應的設置就OK了。
注意點:
- 缺省的Locale是由操作系統決定的。
- Locale由語言和國家代碼構成。
- 國際化資源文件是由baseName+Locale構成,如: MessgesBundle_en_US.properties
- 缺省的國際化資源文件是由baseName.properties命名的,如:MessgesBundle.properties
- 如果資源文件放在了包里,那么baseName就要加上包名了,否則找不到。
以上是Java實現的國際化功能,那么在struts的國際化必定建立在其之上的,了解了這些基礎,才能更好的學好我們的struts。像我們這些非計算機專業的學生,了解這些基礎是十分必要的。