Java 国际化支持(ResourceBundle,Locale)

 

http://rqzhou.iteye.com/blog/1036470

Java对国际化的支持非常容易。通过简单的几个类就可以搞定。

   朋友拖我给他的亲戚做毕业设计时用到了国际化的类。朋友的亲戚不懂。在此变写了个随笔。

在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class

这个方法肯定不合适。那么我们如何寻找一种更适合的方法呢。我们可以通过property来进行。但java提供了一个更好的处理国际化的类ResourceBundle、Locale类。Locale 对象表示了特定的地理、政治和文化地区。ResourceBundle 是一个资源处理类,有两个子类ListResourceBundle, PropertyResourceBundle 。这里不阐述这两个类,这里通过阐述ResourceBundle类。这样下面的子类也就是没有什么难理解的地方。

myres.properties

aaa=good
bbb=thanks

myres_en_US.properties

aaa=good
bbb=thanks

myres_zh_CN.properties

aaa=\u597d
bbb=\u591a\u8c22

import java.util.Locale;
import java.util.ResourceBundle;
public class TestResourceBundle {
public static void main(String[] args) {

                //生成一个中国(country),中文(language) 的locale对象
                Locale locale1 = new Locale("zh", "CN");

                //通过locale1 产生一个资源包类,此时是优先查找myres_zh_CN.properties

                //如果查找不到则查找它的父文件myres_zh.properties

                //如果还查找不到则查找myres.properties文件(这个文件为默认)

                //如果还没有查找到则抛出 java.util.MissingResourceException

                ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1);

                // 查找aaa的属性Value,此时aaa为key 。如果查找不到此key的话仍然会抛出

                // java.util.MissingResourceException 
                System.out.println(resb1.getString("aaa"));
                ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault());
                System.out.println(resb1.getString("aaa"));

                // 生成一个美国的英语的locale对象。其它详见上面的说明。
                Locale locale3 = new Locale("en", "US");  
                ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3);
                System.out.println(resb3.getString("aaa"));
        }
}

运行结果:



good

posted @ 2013-05-17 11:25  IamThat  阅读(472)  评论(0编辑  收藏  举报