ApplicationContext繼承了org.springframework.context.MessageResource介面,您可以使用getMessage()的各個簽署方法來取得訊息資源,從而實現國際化訊息的目的。
您可以簡單的透過MessageResource的一個實作org.springframework.context.support.ResourceBundleMessageSource來取得國際化訊息,首先在Bean定義檔中撰寫:
- beans-config.xml
<?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就可以了。
接下來撰寫一個簡單的測試程式:
- SpringDemo.java
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 登入
使用者 良葛格 於 2005/10/28 下午 8:24 登入