Java对国际化的支持非常容易。通过简单的几个类就可以搞定。
朋友拖我给他的亲戚做毕业设计时用到了国际化的类。朋友的亲戚不懂。在此变写了个随笔。
在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class
这个方法肯定不合适。那么我们如何寻找一种更适合的方法呢。我们可以通过property来进行。但java提供了一个更好的处理国际化的类ResourceBundle、Locale类。Locale 对象表示了特定的地理、政治和文化地区。ResourceBundle 是一个资源处理类,有两个子类ListResourceBundle, PropertyResourceBundle 。这里不阐述这两个类,这里通过阐述ResourceBundle类。这样下面的子类也就是没有什么难理解的地方。
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"));
}
}
注意 :资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.