我們在開發(fā)項(xiàng)目時(shí),常常會需要支持多國語言,這時(shí)就會要求我們的程序支持國際化,也就是可以根據(jù)客戶端系統(tǒng)的語言類型顯示相應(yīng)的文案與界面。在spring中可以很方便的開發(fā)出支持國際化的Web項(xiàng)目。除了spring為我們開發(fā)國際化提供了支持,在JAVA中也為我們提供了相應(yīng)的API。例如java.util.Locale類。Locale類是表示語言和國家/地區(qū)信息的本地化類,也就是通過語言和國家或地區(qū),來確定該系統(tǒng)的國際化版本。這時(shí)可能有人會想為什么要通過兩個(gè)參數(shù)來確定,單純的通過語言確定不了嗎?答案當(dāng)然是不能的。例如我們知道,美國和英國的母語都是英語,所以這兩個(gè)國家的語言類型都是英語類型,在Locale類中用cn表示。既然它們的語言類型是一樣的,所以我們并不能通過一個(gè)參數(shù)來確定。下面是一些國家的語言代碼和國家或地區(qū)的代號。

下面我們簡單看一下Locale類的基本使用。


下面我們看一下Locale類的簡單應(yīng)用。我們知道不同的國家的貨幣符號和日期類型是不同的,所以接下來我們將通過Locale類來定制化的顯示不同國家或地區(qū)的貨幣符號和日期類型。


Locale類除了有上述的作用外,還可以為我們開發(fā)國際化程序時(shí)提供篩選定制化文件的功能,也就是通過Locale類來為我們選擇不同語言和國家的語言文件。但在開發(fā)國際化程序時(shí)除了需要上述的功能外,還需要通過配置文件中的文案顯示不同的內(nèi)容,也可以理解為配置文件中的文案為模板,而不同用戶訪問程序時(shí),提示的信息是不同的。這時(shí)我們就需要動態(tài)更改配置文件中的文案的功能 。在Java中我們可以用占位符來解決。但在本篇中我們將使用spring為我們提供了工具類來實(shí)現(xiàn)上述的功能,也就是MessageFormat類。因?yàn)镸essageFormat類比Java為我們的提供的API提供了更加強(qiáng)大的占位符功能。下面我們看一下MessageFormat類使用。


在開發(fā)國際化程序時(shí)除了動態(tài)選擇不同語言的文件外,還需要的一個(gè)功能就是讀取文件中的屬性。在Java中我可以通過File類來讀取配置文件中的屬性。雖然這么做是可以的,但是這樣不是很方便的獲取我們想要的屬性。Java為了方便我們獲取配置文件中的屬性,于是為我們提供了ResourceBundle類。下面我們看一下ResourceBundle類的使用。




上述的功能基本能夠?qū)崿F(xiàn)我們開發(fā)國際化程序的需求,但是spring為了我們更方便的使用,于是提供了MessageSource接口。spring為這個(gè)接口提供了很多種實(shí)現(xiàn)類,我們可以通過spring.xml的方式來選擇不同語言的配置文件。





spring除了提供ResourceBundleMessageSource類外還提供了ReloadableResourceBundleMessageSource類來加載國際化文件。它們的區(qū)別是后者支持定時(shí)的刷新國際化文件,也就是在程序不重啟的情況下,可以設(shè)置刷新的周期,以達(dá)到動態(tài)更新文件的功能。具體的配置如下。



