java的ResourceBundle.

來源:互聯網
上載者:User

        Java的ResourceBundle是一個很好用的工具,可以很方便的用來實現軟體的國際化和本地化功能。因為ResourceBundle能夠按照一定的規則,自動尋找目錄下符合某個文化和地區的資源檔(.properties檔案)。通過為不同的文化和地區提供不同的資源檔,然後讓java自動根據規則來讀取這些資源檔,實際上就完成軟體的本地化工作。

        先看一個小例子,建立一個test工程,目錄結構如下:
        test/    
                classMain.java
                message_zh.properties
                message_en.properties
        
        2個message*.properties檔案都只有一行,分別是:
                message_zh.properties:
                       msg0="Chinese locale"        
                message_en.properties:
                       msg0="English locale"                             
   
        classMain.java同樣簡單,主程式只有2行:
                 import java.util.*;

         public class classMain{
             public static void main(String args[])
             {
                  ResourceBundle rb = ResourceBundle.getBundle("message"--);  
                  System.out.println(rb.getString("msg0"));
             }
          }

        編譯javac classMain.java即可產生classMain.class檔案,分別在中文Locale和英文Locale下運行java classMain.class,會發現輸出的字串分別是“Chinese locale“和“English locale“。
        
        看看上面的2行代碼,關鍵在於ResourceBundle.getBundle(“message“)。顯然這個message與那兩個message*.properties檔案大有關係。查閱一下JDK的文檔可以發現,ResourceBundle實際上是把“message“當作一個basename使用,然後根據當前的Locale和國家來尋找basename_*.properties檔案,所以當Local分別為中文和英文時,ResourceBundle分別使用的就是message_zh.properties和message_en.properties檔案。然後ResourceBundle讀入找到的.properties檔案,並對其中的資源進行處理,這就不難理解ResourceBundle.getString(“msg0“)的結果了(msg0=“** locale“)。

        為了求證以上的分析,我又查看了一下java的原始碼,getBundle實際上會轉而調用getBundleImpl,getBundleImpl先確定實際使用的Locale,然後根據搜尋規則形成一個搜尋列表,再交給findBundle處理,然後由findBundle完成實際.properties檔案的搜尋工作。所有代碼均在JDK的java.util.ResourceBundle.java中,不再列舉。

        Eclipse的國際化和本地化的實現,實際上就是基於ResourceBundle來實現的(當然,要感謝Eclipse強大的外掛程式機制)。本人因為工作需要,稍稍做了一下瞭解,順手記下來,以防忘卻。

        本人是Java新手,如有錯誤,歡迎批評,歡迎鄙視。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.