ApplicationContext繼承了org.springframework.context.MessageResource介面,您可以使用getMessage()的各個簽署方法來取得訊息資源,從而實現國際化訊息的目的。
您可以簡單的透過MessageResource的一個實作org.springframework.context.support.ResourceBundleMessageSource來取得國際化訊息,首先在Bean定義檔中撰寫:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename"> <value>messages</value> </property> </bean> </beans>
basename屬性用來設定訊息資源的前置檔案名稱,在這邊設定是messages,則訊息資源檔的名稱可以是
messages_en_US.properties、messages_zh_TW.properties、
messages_*.properties等等名稱,在這邊提供兩個:messages_en_US.properties、
messages_zh_TW.properties,首先messages_en_US.properties內容如下:
- messages_en_US.properties
userLogin=User {0} login at {1}
messages_zh_TW.properties內容如下:
- messages_zh_TW.properties
userLogin=使用者 {0} 於 {1} 登入
其中{0}與{1}是可以在程式執行過程中設定的佔位字元,ResourceBundleMessageSource實際上會使用JDK的
ResourceBundle來讀取這些文件,而中文在編碼過程中會發生問題,為了要能正確的顯示中文,我們必須對
message_zh_TW.properties進行編碼轉換,使用JDK工具中的native2ascii即可:
native2ascii messages_zh_TW.properties messages_zh_TW.txt
|
之後將messages_zh_TW.txt覆蓋(替換)掉messages_zh_TW.properties就可以了。
接下來撰寫一個簡單的測試程式:
package onlyfun.caterpillar;
import java.util.Calendar; import java.util.Locale; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringDemo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans-config.xml");
Object[] arguments = new Object[] {"良葛格", Calendar.getInstance().getTime()};
System.out.println( context.getMessage("userLogin", arguments, Locale.US)); System.out.println( context.getMessage("userLogin", arguments, Locale.TAIWAN)); } }
透過設定參數並指定Locale,使用getMessage()設定對應的訊息,這個測試程式結果會顯示以下的內容:
User 良葛格 login at 10/28/05 8:24 PM
使用者 良葛格 於 2005/10/28 下午 8:24 登入
|
|