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相似。