Java中的資源國際化


1.資源國際化中兩個經常使用術語 I18N 與 L10N

I18N:全稱Internationlization,首字母I 與尾字母N之間共18個字母。資源國家化就是讓一個軟件產品使用國際環境,如語言,文化,使用習慣等;java

L10N:全程Localization, 首字母L與尾字母N之間共10個字母。資源本地化就是讓軟件產品使用本地的環境,如語言,文化,使用習慣等。web

    資源國際化與資源本地化無本質差異。若是一個軟件產品最初只有英語界面,那麼爲了適應中國用戶而使系統支持中文的過程即可視爲本地化。瀏覽器


2.資源國際化的使用介紹

2.1 資源文件.properties

     屬性文件能夠存儲各國語言,存儲格式是 key=value。當有多個屬性文件時,命名格式是:dom

         xxx.properties  (缺省使用)
spa

         xxx_語言簡稱_國家簡稱.propertes (符合國家和語言時使用)
code

     屬性文件中只能包含ASCII字符。資源

     注意:Uincode字符佔2個字節,ASCII字符佔1個字節。get

     例如:虛擬機

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

相關文章
相關標籤/搜索