Spring筆記之八(Internationalization of spring)
??? 目前Spring中提供了兩個 MessageSource接口的實現,即ResourceBundleMessageSource和ReloadableResourceBundleMessageSource,后者提供了無需重啟即可重新加載配置信息的特性。
???
??? 在下面的配置文件中,通過MessageResource的一個實現類org.springframework.context.support.ResourceBundleMessageSource來獲得國際化的信息。
?2?<description>Spring?Quick?Start</description>
?3?<bean?id="messageSource"
???? class ="org.springframework.context.support.ResourceBundleMessageSource" >
?4?<property?name="basenames">
?5?<list>
?6?<value>messages</value>
?7?</list>
?8?</property>
?9?</bean>
10?</beans>
11?
這里聲明了一個名為
messageSource
的Bean(
注意:
對于Message定義,Bean ID必須為messageSource,這是目前Spring的編碼規約),對應類為ResourceBundleMessageSource。
而其中的basename屬性用來設定資源信息文件的前置文件名稱,在本例中為messages。Spring會自動在CLASSPATH根路徑中按照如下順序搜尋資源信息文件并進行加載(以Locale為zh_CN為例,其實Spring在實際上調用了JDK的ResourceBundle讀取配置文件)
:
messages_zh_CN.properties
messages_zh.properties
messages.properties
messages_zh_CN.class
messages_zh.class
messages.class
<!--[if !supportLists]--> 資源配置信息文件中的內容
2?userinfo=當前登錄用戶:?[{0}]?登錄時間:[{1}]
3? messages_en_US.properties:
4?userinfo=Current?Login?user:?[{0}]?Login?time:[{1}]
5?
??測試代碼:
??????????????? new ?FileSystemXmlApplicationContext( " bean.xml " );
2?Object[]?arg?=?new ?Object[]
3?{?"Erica" ,?Calendar.getInstance().getTime()
4? };
5?//以系統默認Locale加載信息(對于中文WinXP而言,默認為zh_CN)
6?String?msg?=?ctx.getMessage("userinfo" ,?arg);
7?System.out.println("Message?is?===>?"+ msg);
8?
代碼中,我們將一個Object數組arg作為參數傳遞給ApplicationContext.getMessage方法,這個參數中包含了出現在最終文字信息中的可變內容,ApplicationContext? 將根據參數中的Locale信息對其進行處理(如針對不同?? Locale設定日期輸出格式),并用其替換配置文件中的{n}標識(n代表參數數組中的索引,從1? 開始)。
運行上面的代碼,得到以下輸出的內容:
?? Message is ===> |
ì〃¤?°|ì???¨???〃: [Erica] |ì???¨o〃¤??:[07-9-27 上午1:27]
針對ResourceBundle的編碼過程中發生的問題。這是由于轉碼過程中產生的編碼問題引發的。比較簡單的解決辦法是通過JDK提供的轉碼工具native2ascii.exe? 進行轉換。執行:
?? Message is ===>
當前登錄用戶: [Erica] 登錄時間:[07-9-27 上午1:30]
嘗試在代碼中指定不同的Locale參數:
String msg = ctx.getMessage("userinfo", arg, Locale.US);
Message is ===> Current Login user: [Erica] Login time::[9/27/07 1:35AM]
可見,前者根據當前默認Locale"zh_CN",getMessage方法自動加載了messages_zh_CN.properties文件;后者 getMessage 方法根據指定編碼"en_US"加載了messages_en_US.properties文件。
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調華麗/簡單生活/完美人生
posted on 2007-09-27 01:00 poetguo 閱讀(1421) 評論(1) 編輯 收藏 所屬分類: Spring