实上,Java语言不可能支持所有国家和语言,如需要获取Java语言所支持的语言和国家,可调用Locale类的getAvailableLocale方法获取,该方法返回一个Locale数组,该数组里包含了Java所支持的语言和国家.

Java程序的国际化主要通过如下三个类完成

     java.util.ResourceBundle:用于加载一个国家,语言资源包

     java.util.Locale:用于封装一个特定的国家/区域,语言环境

     java.text.MessageFormat:用于格式化带占位符的字符串

 下面的程序简单地示范了如何获取Java所支持的国家和语言



@Test
    public void test1(){
         //返回java所支持的全部国家和语言的数组
          Locale[] localeList=Locale.getAvailableLocales();
          //遍历数组的每个元素,依次获取所支持的国家和语言
          for (int i=0;i<localeList.length;i++)
          {
           //打印出所支持的国家和语言
           System.out.println(localeList[i].getDisplayCountry()+"="+localeList[i].getCountry()+"  "+localeList[i].getDisplayLanguage()+"="+localeList[i].getLanguage());
          }
    }



结果:

日本=JP 日文=ja
秘鲁=PE 西班牙文=es
= 英文=en
日本=JP 日文=ja
巴拿马=PA 西班牙文=es
波斯尼亚和黑山共和国=BA 塞尔维亚文=sr
= 马其顿文=mk
危地马拉=GT 西班牙文=es
阿拉伯联合酋长国=AE 阿拉伯文=ar
挪威=NO 挪威文=no
阿尔巴尼亚=AL 阿尔巴尼亚文=sq

这只列举了一部分

我们使用java.lang.Locale来构造Java国际化的情境。

 java.lang.Locale代表特定的地理、政治和文化。需要Locale来执行其任务的操作叫语言环境敏感的操作



@Test
    public void test2(){
        //构造一个默认的Local
        Locale defaultLocale = Locale.getDefault();

        //获得此Java虚拟机当前线程默认的语言环境值
        //获取当前Java虚拟机线程默认的国家和语言信息

        String country = defaultLocale.getCountry();//返回国家地区代码
        
        String language = defaultLocale.getLanguage();//返回国家的语言

        String displayCountry = defaultLocale.getDisplayCountry();//返回适合向用户显示的国家信息

        String displayLanaguage = defaultLocale.getDisplayLanguage();//返回适合向用户展示的语言信息

        String displayName = defaultLocale.getDisplayName();//返回适合向用户展示的语言环境名
        
        System.out.println(country+" "+language+" "+displayCountry+" "+displayName);
        
    }



结果:

CN zh 中国 中文 (中国)

构造方法为:Locale(String language, String country);

  

使用ResouceBundle读取国际化资源文件

 

ResourceBundle资源包包含特定语言环境的对象。使用其可以加载并读取语言环境资源。

 

  1. 轻松的本地化或者翻译成不同的语言
  2. 一次处理多个语言环境
  3. 以后可以轻松的进行修改,一遍支持更多的语言环境。

当程序需要特定于语言环境的对象时,它使用getBundle()方法加载ResourceBundle类

ResourceBundle rb = ResourceBundle.getBundle(“res.MessageBundle”, currentLocale);

其中,res.MessageBundle代表的是我们在src下建立了一个res文件夹,而res文件夹下有一个名为MessageBundle.properteis的资源文件。我们允许在此建立多个国际化资源文件:MessageBundle_zh_CN.properties;MessageBundle_en_US.properteis;其中MessageBundle就是要在构造ResourceBundle时使用的字符串,这个名字合法即可,不需要特定约束。后边的名字一定要遵循规则,resourceName_language_country.properteis;

然后我们使用rb.getString(key);就可以获取资源文件中的Key对应的value.