国际化是开发中比较常见的一种要求



               


1.国际化实现思路


               比如,一个程序要求可以同时实现英语,法语,汉语的显示



               思路:



          

java 查询结果 国际化处理 java怎么做国际化_System




可以根据不同的语言配置不同的资源文件(资源文件有时也称属性文件,其后缀名.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类

java 查询结果 国际化处理 java怎么做国际化_java 查询结果 国际化处理_02






代码:



在写代码之前首先写一个资源文件

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


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


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}......