java学习之路----java类库---程序国际化

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



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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值