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

来源:互联网 发布:young网络用户名 编辑:程序博客网 时间:2024/06/04 00:24
               国际化是开发中比较常见的一种要求



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



原创粉丝点击