I18N:全称Internationlization,首字母I 与尾字母N之间共18个字母。资源国家化就是让一个软件产品使用国际环境,如语言,文化,使用习惯等;java
L10N:全程Localization, 首字母L与尾字母N之间共10个字母。资源本地化就是让软件产品使用本地的环境,如语言,文化,使用习惯等。web
资源国际化与资源本地化无本质差异。若是一个软件产品最初只有英语界面,那么为了适应中国用户而使系统支持中文的过程即可视为本地化。浏览器
属性文件能够存储各国语言,存储格式是 key=value。当有多个属性文件时,命名格式是:dom
xxx.properties (缺省使用)
spa
xxx_语言简称_国家简称.propertes (符合国家和语言时使用)
code
属性文件中只能包含ASCII字符。资源
注意:Uincode字符占2个字节,ASCII字符占1个字节。get
例如:虚拟机
constant.properties产品
hello=你好
constant_en_US.properties
hello=nello
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 你好
TimeZone 与Locale相似。