java學習之路----java類庫---程式國際化

逸卿發表於2014-04-13
            國際化是開發中比較常見的一種要求



               
1.國際化實現思路
               比如,一個程式要求可以同時實現英語,法語,漢語的顯示

               思路:

          


可以根據不同的語言配置不同的資原始檔(資原始檔有時也稱屬性檔案,其字尾名.properties),所以資原始檔是以key--value(鍵值對)的形式出現,只要找到了key,就找到了value。

想要實現Java程式的國際化,必須通過以下三個類實現

          .java.util.Locale;用於表示一個國家的語言類

          .java.util.ResourceBundle;用於訪問資原始檔

          .java.txt.MessageFormat;格式化資原始檔的佔位字位符

具體流程如下:

          Locale來指定區域碼---->ResourceBundle根據Locale提供的區域碼找到相應的資原始檔--->如果資原始檔中存在動態文字,則用MessageFormat來格式化

    2.Locale類

          locale的構造方法:

               public  Locale(String language)//根據語言程式碼來構造一個語言環境
                public  Locale(String language,)//根據語言和國家來構造一個語言環境
     

       3.ResourceBundle類




程式碼:

在寫程式碼之前首先寫一個資原始檔
Message.properties

          public class InterDemo {
     
      public static void main(String[] args) {
          ResourceBundle rb=ResourceBundle.getBundle( "Message"); //找到資源
          System. out .println("資源" +rb.getString( "info"));
     }

}
結果:
資源Hello

4.java國際化程式的實現
          
第一步:配好屬性檔案

               中文:Message_zh_CN
               內容:info= \u4f60\u597d  這裡的文字需要轉碼:你可以用native2ascii.exe來進行轉碼
               
          英文:Message_en_US
              內容:info=Hello
                  
               法文:Message_fr_FR
                內容: info=Bonjour      


public class InterDemo2 {
      public static void main(String[] args) {
              Locale zhLoc= new Locale("zh" ,"CN" );//表示中國地區
              Locale enLoc= new Locale("en" ,"US" );//表示美國地區
              Locale frLoc= new Locale("fr" ,"FR" );//表示法國地區
               //找到中文的屬性檔案
              ResourceBundle zhrb=ResourceBundle.getBundle( "Message",zhLoc);
               //找到英文的屬性檔案
              ResourceBundle enrb=ResourceBundle.getBundle( "Message",enLoc);
               //找到法文的屬性檔案
              ResourceBundle frrb=ResourceBundle.getBundle( "Message",frLoc);
              System. out .println("中文:" +zhrb.getString( "info"));
              System. out .println("英文:" +enrb.getString( "info"));
              System. out .println("法文:" +frrb.getString( "info"));
     }

}

結果:
中文:你好
英文:Hello
法文:Bonjour
          

5.處理動態文字
               上面的程式碼都是寫死了,如果想要動態的輸入一些內容,就要用佔位符來表示出動態文字的內容
                


步驟:

需要改動的地方:
    中文:Message_zh_CN
               內容:info= \u4f60\u597d{0} 這裡的文字需要轉碼:你可以用native2ascii.exe來進行轉碼
               
          英文:Message_en_US
              內容:info=Hello{0}
                  
               法文:Message_fr_FR
                內容: info=Bonjour{0}   
              

程式碼:

          public class InterDemo2 {
      public static void main(String[] args) {
              Locale zhLoc= new Locale("zh" ,"CN" );//表示中國地區
              Locale enLoc= new Locale("en" ,"US" );//表示美國地區
              Locale frLoc= new Locale("fr" ,"FR" );//表示法國地區
               //找到中文的屬性檔案
              ResourceBundle zhrb=ResourceBundle.getBundle( "Message",zhLoc);
               //找到英文的屬性檔案
              ResourceBundle enrb=ResourceBundle.getBundle( "Message",enLoc);
               //找到法文的屬性檔案
              ResourceBundle frrb=ResourceBundle.getBundle( "Message",frLoc);
              
              
              System. out .println("中文:" +zhrb.getString( "info"));
              System. out .println("英文:" +enrb.getString( "info"));
              System. out .println("法文:" +frrb.getString( "info"));
              
              String str1=zhrb.getString( "info" );
              String str2=enrb.getString( "info" );
              String str3=frrb.getString( "info" );
              
              
              System. out .println("中文-->" +MessageFormat.format (str1, "中國" ));
              System. out .println("英文-->" +MessageFormat.format (str2, "China" ));
              System. out .println("法語-->" +MessageFormat.format (str3, "China" ));
     }

}
結果:
中文:你好{0}
英文:Hello{0}
法文:Bonjour{0}
中文-->你好中國
英文-->HelloChina
法語-->BonjourChina

如果需要跟多的佔位符,則是{1},{2}......

相關文章