首页 > 代码库 > Java语言的国际化

Java语言的国际化

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

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

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

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

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

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

import java.util.ResourceBundle;
import java.util.Locale;
import java.text.MessageFormat;
public class  LocaleList
{
 public static void main(String[] args)
 {
  //返回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
=   保加利亚文=bg
伊拉克=IQ   阿拉伯文=ar
也门=YE   阿拉伯文=ar
=   匈牙利文=hu
葡萄牙=PT   葡萄牙文=pt
塞浦路斯=CY   希腊文=el
卡塔尔=QA   阿拉伯文=ar
马其顿王国=MK   马其顿文=mk
=   瑞典文=sv
瑞士=CH   德文=de
美国=US   英文=en
芬兰=FI   芬兰文=fi
=   冰岛文=is
=   捷克文=cs
马耳他=MT   英文=en
斯洛文尼亚=SI   斯洛文尼亚文=sl
斯洛伐克=SK   斯洛伐克文=sk
=   意大利文=it
土耳其=TR   土耳其文=tr
=   中文=zh
=   泰文=th
沙特阿拉伯=SA   阿拉伯文=ar
=   挪威文=no
英国=GB   英文=en
塞尔维亚及黑山=CS   塞尔维亚文=sr
=   立陶宛文=lt
=   罗马尼亚文=ro
新西兰=NZ   英文=en
挪威=NO   挪威文=no
立陶宛=LT   立陶宛文=lt
尼加拉瓜=NI   西班牙文=es
=   荷兰文=nl
爱尔兰=IE   爱尔兰文=ga
比利时=BE   法文=fr
西班牙=ES   西班牙文=es
黎巴嫩=LB   阿拉伯文=ar
=   朝鲜文=ko
加拿大=CA   法文=fr
爱沙尼亚=EE   爱沙尼亚文=et
科威特=KW   阿拉伯文=ar
塞尔维亚=RS   塞尔维亚文=sr
美国=US   西班牙文=es
墨西哥=MX   西班牙文=es
苏丹=SD   阿拉伯文=ar
印度尼西亚=ID   印度尼西亚文=in
=   俄文=ru
=   拉托维亚文(列托)=lv
乌拉圭=UY   西班牙文=es
拉脱维亚=LV   拉托维亚文(列托)=lv
=   希伯来文=iw
巴西=BR   葡萄牙文=pt
叙利亚=SY   阿拉伯文=ar
=   克罗地亚文=hr
=   爱沙尼亚文=et
多米尼加共和国=DO   西班牙文=es
瑞士=CH   法文=fr
印度=IN   印地文=hi
委内瑞拉=VE   西班牙文=es
巴林=BH   阿拉伯文=ar
菲律宾=PH   英文=en
突尼斯=TN   阿拉伯文=ar
=   芬兰文=fi
奥地利=AT   德文=de
=   西班牙文=es
荷兰=NL   荷兰文=nl
厄瓜多尔=EC   西班牙文=es
台湾地区=TW   中文=zh
约旦=JO   阿拉伯文=ar
=   白俄罗斯文=be
冰岛=IS   冰岛文=is
哥伦比亚=CO   西班牙文=es
哥斯达黎加=CR   西班牙文=es
智利=CL   西班牙文=es
埃及=EG   阿拉伯文=ar
南非=ZA   英文=en
泰国=TH   泰文=th
希腊=GR   希腊文=el
意大利=IT   意大利文=it
=   加泰罗尼亚文=ca
匈牙利=HU   匈牙利文=hu
=   法文=fr
爱尔兰=IE   英文=en
乌克兰=UA   乌克兰文=uk
波兰=PL   波兰文=pl
卢森堡=LU   法文=fr
比利时=BE   荷兰文=nl
印度=IN   英文=en
西班牙=ES   加泰罗尼亚文=ca
摩洛哥=MA   阿拉伯文=ar
玻利维亚=BO   西班牙文=es
澳大利亚=AU   英文=en
=   塞尔维亚文=sr
新加坡=SG   中文=zh
=   葡萄牙文=pt
=   乌克兰文=uk
萨尔瓦多=SV   西班牙文=es
俄罗斯=RU   俄文=ru
韩国=KR   朝鲜文=ko
=   越南文=vi
阿尔及利亚=DZ   阿拉伯文=ar
越南=VN   越南文=vi
黑山=ME   塞尔维亚文=sr
=   阿尔巴尼亚文=sq
利比亚=LY   阿拉伯文=ar
=   阿拉伯文=ar
中国=CN   中文=zh
白俄罗斯=BY   白俄罗斯文=be
香港=HK   中文=zh
=   日文=ja
以色列=IL   希伯来文=iw
保加利亚=BG   保加利亚文=bg
=   印度尼西亚文=in
马耳他=MT   马耳他文=mt
巴拉圭=PY   西班牙文=es
=   斯洛文尼亚文=sl
法国=FR   法文=fr
捷克共和国=CZ   捷克文=cs
瑞士=CH   意大利文=it
罗马尼亚=RO   罗马尼亚文=ro
波多黎哥=PR   西班牙文=es
加拿大=CA   英文=en
德国=DE   德文=de
=   爱尔兰文=ga
卢森堡=LU   德文=de
=   德文=de
阿根廷=AR   西班牙文=es
=   斯洛伐克文=sk
马来西亚=MY   马来文=ms
克罗地亚=HR   克罗地亚文=hr
新加坡=SG   英文=en
=   丹麦文=da
=   马耳他文=mt
=   波兰文=pl
阿曼=OM   阿拉伯文=ar
=   土耳其文=tr
泰国=TH   泰文=th
=   希腊文=el
=   马来文=ms
瑞典=SE   瑞典文=sv
丹麦=DK   丹麦文=da
洪都拉斯=HN   西班牙文=es

 

总结

     通过上面该程序,我们就可以获得Java程序所支持的国家/环境,虽然可以通过查阅相关资料来获取Java语言所支持的国家/语言环境,但如果这些资料不是随手可得,则可以通过上面程序来获得Java语言所支持的国家/语言环境

 

 

 

 

 

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

 

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

 

构造一个系统默认的Locale

 

Locale defaultLocale = Locale.getDefault();

 

获得此Java虚拟机当前线程默认的语言环境值

 

 

 

获取当前Java虚拟机线程默认的国家和语言信息

 

String country = defaultLocale.getCountry();//返回国家地区代码

 

String language = defaultLocale.getLanguage();//返回国家的语言

 

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

 

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

 

String displayName = defaultLocale.getDisplayName();//返回适合向用户展示的语言环境名

 

 

 

加入当前Java虚拟机线程所处的操作系统的区域语言设置为“中文(简体,中国)”,则上边的运行结果依次将会是:

 

    CN

 

    zh

 

    中国

 

    中文

 

    中文(中国)

 

根据国家地区和语言构造一个Locale(语言环境)

 

Locale currentLocale = new Locale(“zh”, ”CN”);

 

构造方法为: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.

 

使用Struts1.x实现国际化自动切换

 

查看Struts源码就可以发现,语言环境信息就存放在session中,通过this.setLocale(request, locale);

 

所以要实现国际化就要在页面上点击超链接经过Action的时候改变会话中Locale(语言环境)的值。在Action中:

 

 

 

[java] view plaincopy
  1. //接受客户端传过来的语言请求信息  
  2. String language = request.getParameter(“myLanguage”);  
  3.   
  4. //定义语言地区信息  
  5. Locale currentLocale = null;  
  6.   
  7. //根据不同的请求创建不同的语言环境信息  
  8. if (“zh”.equals(language)) {  
  9.     currentLocale = new Locale(“zh”, “CN”);  
  10. } else if (“en”.equals(language)) {  
  11.     currentLocale = new Locale(“en”, “US”);  
  12. }  
  13.   
  14. //……  
  15. //将session中的信息更改掉   
  16. this.setLocale(request, currentLocale);  
  17.   
  18. //当然,在页面显示资源文件信息的时候采用如下这种方式:  
  19.   
  20. //<bean:message key=”key” />  

 

Java语言的国际化