最近单位里的一个项目使用了国际化,这玩意儿以前实习的时候搞过,后来时间久了就慢慢淡忘了,现在赶紧翻起资料重新理解下。
关于国际化的思路大致是这样子的,你把要根据不同语言环境显示为不同语言的信息用一个叫资源文件的存储起来,为了方便查找,采用了属性文件的Key-Value进行存放,然后程序根据语言环境到响应的资源文件中查找对应的信息,进行显示。
这就涉及到以下两个类:
- java.util.Locale
- java.util.ResourceBundle
不多说,上代码:
public class I18NTest {
public static void main(String[] args) {
Locale locale = Locale.getDefault();
System.out.println(locale.getDisplayCountry() + "->"
+ locale.getCountry());
String basename = "cn/abc/i18n/message";
ResourceBundle resourceBundle = ResourceBundle.getBundle(basename,
locale);
System.out.println(resourceBundle.getString("hello"));
System.out.println(MessageFormat.format(
resourceBundle.getString("greet"), "孟子", new Date()));
}
}
资源文件为:message_en_US.properties和message_zh_CN.properties
message_en_US.properties的内容很简单;
hello=Hello
message_zh_CN.properties的内容则采用了JDK自带的native2ascii将中文转化ascii编码:
hello=\u60a8\u597d
greet={0},\u60a8\u597d\uff01\u73b0\u5728\u662f{1}.