Java 国际化支持(ResourceBundle,Locale)

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

Process finished with exit code 0
 

 

注意 :资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

 

中文资源文件的转码 native2ascii
 
这个工具用法如下:
Java 国际化支持(ResourceBundle,Locale)
 
如果觉得麻烦,可以直接将中文粘贴到里面,回车就可以看到转码后的结果了。
Java 国际化支持(ResourceBundle,Locale)

你可能感兴趣的:(java,jdk)