1.资源国际化中两个常用术语 I18N 与 L10N
I18N:全称Internationlization,首字母I 与尾字母N之间共18个字母。资源国家化就是让一个软件产品使用国际环境,如语言,文化,使用习惯等;
L10N:全程Localization, 首字母L与尾字母N之间共10个字母。资源本地化就是让软件产品使用本地的环境,如语言,文化,使用习惯等。
资源国际化与资源本地化无本质差别。如果一个软件产品最初只有英语界面,那么为了适应中国用户而使系统支持中文的过程便可视为本地化。
2.资源国际化的使用介绍
2.1 资源文件.properties
属性文件可以存储各国语言,存储格式是 key=value。当有多个属性文件时,命名格式是:
xxx.properties (缺省使用)
xxx_语言简称_国家简称.propertes (符合国家和语言时使用)
属性文件中只能包含ASCII字符。
注意:Uincode字符占2个字节,ASCII字符占1个字节。
例如:
constant.properties
hello=你好
constant_en_US.properties
hello=nello
2.2 Locale
Java会根据客户端的Locale来决定选择哪个资源文件里的内容。在java的桌面程序中,Locale由java的虚拟机提供;在java的web应用中,由客户端浏览器提供。
Locale里面存储了有关该地区的信息,如国家,语言等;还会决定数字/日期/时间/货币/百分比等。通过如下代码可以查看所有可获得Locale:
Locale[] al = Locale.getAvailableLocales();
for(Locale l : al)
{
System.out.println(l.getDisplayLanguage() + ", " + l.getLanguage()
+ ", " + l.getDisplayCountry() + ", " + l.getCountry());
}
打印结果不在粘贴。
Locale的修改必须在类初始化之前进行,
public class Test
{
private ResourceBundle constBundle = ResourceBundle.getBundle("constant");
public void test()
{
System.out.println(dl.getDisplayLanguage() + ", " + dl.getLanguage()
+ ", " + dl.getDisplayCountry() + ", " + dl.getCountry());
System.out.println(constBundle.getString("hello"));
}
public static void main(String[] args)
{
Test t = new Test();
t.test();
Locale.setDefault(Locale.US);
Test t2 = new Test();
t2.test();
Locale.setDefault(Locale.UK);
//因为没有创建constant_en_GB.properties,所以调用缺省的constant.properties,输出了中文
Test t3 = new Test();
t3.test();
}
}
输出结果:
中文, zh, 中国, CN
你好
English, en, United States, US
hello
English, en, United Kingdom, GB
你好
2.3 TimeZone
TimeZone 与Locale类似。