我們在開發項目時,常常會需要支持多國語言,這時就會要求我們的程序支持國際化,也就是可以根據客戶端系統的語言類型顯示相應的文案與界面。在spring中可以很方便的開發出支持國際化的Web項目。除了spring為我們開發國際化提供了支持,在JAVA中也為我們提供了相應的API。例如java.util.Locale類。Locale類是表示語言和國家/地區信息的本地化類,也就是通過語言和國家或地區,來確定該系統的國際化版本。這時可能有人會想為什么要通過兩個參數來確定,單純的通過語言確定不了嗎?答案當然是不能的。例如我們知道,美國和英國的母語都是英語,所以這兩個國家的語言類型都是英語類型,在Locale類中用cn表示。既然它們的語言類型是一樣的,所以我們并不能通過一個參數來確定。下面是一些國家的語言代碼和國家或地區的代號。
下面我們簡單看一下Locale類的基本使用。
下面我們看一下Locale類的簡單應用。我們知道不同的國家的貨幣符號和日期類型是不同的,所以接下來我們將通過Locale類來定制化的顯示不同國家或地區的貨幣符號和日期類型。
Locale類除了有上述的作用外,還可以為我們開發國際化程序時提供篩選定制化文件的功能,也就是通過Locale類來為我們選擇不同語言和國家的語言文件。但在開發國際化程序時除了需要上述的功能外,還需要通過配置文件中的文案顯示不同的內容,也可以理解為配置文件中的文案為模板,而不同用戶訪問程序時,提示的信息是不同的。這時我們就需要動態更改配置文件中的文案的功能 。在Java中我們可以用占位符來解決。但在本篇中我們將使用spring為我們提供了工具類來實現上述的功能,也就是MessageFormat類。因為MessageFormat類比Java為我們的提供的API提供了更加強大的占位符功能。下面我們看一下MessageFormat類使用。
在開發國際化程序時除了動態選擇不同語言的文件外,還需要的一個功能就是讀取文件中的屬性。在Java中我可以通過File類來讀取配置文件中的屬性。雖然這么做是可以的,但是這樣不是很方便的獲取我們想要的屬性。Java為了方便我們獲取配置文件中的屬性,于是為我們提供了ResourceBundle類。下面我們看一下ResourceBundle類的使用。
上述的功能基本能夠實現我們開發國際化程序的需求,但是spring為了我們更方便的使用,于是提供了MessageSource接口。spring為這個接口提供了很多種實現類,我們可以通過spring.xml的方式來選擇不同語言的配置文件。
spring除了提供ResourceBundleMessageSource類外還提供了ReloadableResourceBundleMessageSource類來加載國際化文件。它們的區別是后者支持定時的刷新國際化文件,也就是在程序不重啟的情況下,可以設置刷新的周期,以達到動態更新文件的功能。具體的配置如下。