Java國際化


  國際化的英文為Internationalization,這個也太長了,所以它又稱為I18n(英文單詞 internationalization的首末字符i和n,18為中間的字符數)。

  除了i18n還有L10n(localization),g11n(globalization),還有m17n(multilingualization),它們的區別是:
  • 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。像我們這些非計算機專業的學生,了解這些基礎是十分必要的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM