JAVA之i18n

来源:互联网 发布:页面初始化加载js 编辑:程序博客网 时间:2024/06/02 16:30

        JAVA由于采用unicode编码,因此i18n(即internation,国际化)比较方便。下面实现一个能根据操作系统的默认地区选择显示字符的button,来说明java怎样方便地实现本地化。

        基本思路是将button上要显示的字符与一个本地化信息的专用资源包联系起来。资源包的创建使用java.util.ResourceBundle类。资源包一般利用静态getBundle()方法得到。getBundle()方法的函数声明如下:

       public static final ResourceBundle getBundle(String baseName,Locale locale);

       其中baseName表示的本地化信息配置文件的基本名,比如创建中文简体的本地化信息配置文件,在应用程序的文件夹下创建一个文本文件localeInfo_zh_CN.properties,其中localeInfo为信息配置文件的基本名,zh是语言代码中文简体,CN是国家代码中国。若要支持英文,再创建一个文本文件localeInfo_us_EN.properties。利用文本创建信息配置的好处是修改显示信息时不用编译,而且可以很方便地添加更多的本地资源信息。localeInfo_zh_CN.properties的内容如下:

       label1 = 按钮一
       label2 = 按钮二

       相应地,localeInfo_us_EN.properties的内容如下:

       label1 = button one
       label2 = button two

       然后一定要记住用j2sdk的native2ascii工具将文本文件转化为ascii码,不然非英文的信息就将显示为乱码。localeInfo_zh_CN.properties转化为ascii后的内容如下:

      label1 = /u6309/u94ae/u4e00
      label2 = /u6309/u94ae/u4e8c

       locale是一个Locale类,此类代表了特定的地理,政治或文化区域。可以通过new Locale(String language,String country)来创建,此 构 造 函 数 第 一 个 参 数 是ISO-639 中 定 义 的 语 言 代 码(http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt); 第 二 个 参 数 为ISO-3166 中 定 义 的 国 家 代 码(http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html)。比如中国简体中文的Locale类可以通过zhLocale = new Locale("zh","CN");创建。

       于是我们就可以利用ResourceBundle bundle = ResourceBundle.getBundle("languageInfo",Locale.getgetDefault());创建本地化资源信息包,其中Locale.getgetDefault()是获取操作系统默认地区的静态方法。

       然后利用语句JButton b1=new JButton(bundle.getString("label1"));
       JButton b2 = new JButton(bundle.getString("label2"));将按钮b1,b2与资源信息包中相应的键值对应起来。这样,当应用程序在默认地区为中文的操作系统上运行时,按钮b1显示为“按钮一”,b2显示为“按钮二”;在英文操作系统上运行时,相应显示为“button one”,"button two"。

     也可以人为地设定默认地区,利用Locale.setDefault(zhLocale);语句就可将默认地区设置为刚才创建的中国简体中文zhLocale。

原创粉丝点击