1.spring對國際化支持
國際化支持在實際開發中可能是最常用的特性。對於一個需要支持不同語言環境的應用而言,我們所採取的最常用的策略一般是通過一個獨立的資源文件(如一個properties文件)完成所有語言信息(如界面上的提示信息)的配置,Spring對這種傳統的方式進行了封裝,並提供了更加強大的功能,如信息的自動裝配以及熱部署功能(配置文件修改後自動讀取,而無需重新啓動應用程序) ,下面是一個典型的示例:
<beans> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>myres</value> </list> </property> </bean> </beans>
這裏聲明瞭一個名爲messageSource的Bean(注意對於Message定義,Bean ID必須爲messageSource,這是目前Spring的編碼規約) ,對應類爲ResourceBundleMessageSource,目前Spring中提供了兩個MessageSource接口的實現,即ResourceBundleMessageSource和ReloadableResourceBundleMessageSource,後者提供了無需重啓即可重新加載配置信息的特性。
在配置節點中, 我們指定了一個配置名“messages”。 Spring會自動在CLASSPATH根路徑中按照如下順序搜尋配置文件並進行加載(以Locale爲zh_CN爲例):
messages_zh_CN.properties ,messages_zh.properties ,messages.properties ,messages_zh_CN.class,messages_zh.class ,messages.class
(Spring實際上調用了JDK的ResourceBundle讀取配置文件,相關內容請參見JDK文檔)
示例中包含了兩個配置文件,內容如下:
messages_zh_CN.properties:
userinfo=當前登錄用戶: [{0}] 登錄時間:[{1}]
messages_en_US.properties:
userinfo=Current Login user: [{0}]Login time:[{1}]
我們可以通過下面的語句進行測試:
ApplicationContext ctx=new FileSystemXmlApplicationContext("bean.xml");
Object[] arg = newObject[]{ "Erica", Calendar.getInstance().getTime()};
//以系統默認Locale加載信息(對於中文WinXP而言,默認爲zh_CN)
String msg = ctx.getMessage("userinfo", arg);
System.out.println("Message is ===> "+msg)
如果輸出產生亂碼,可能是因爲轉碼的時候出現異常(在eclipse中資源文件可以直接輸入中文,自動轉碼,但是在外邊通過記事本編輯輸入中文是,轉碼就會出現異常),比較簡單的解決辦法是通過JDK提供的轉碼工具native2ascii.exe進行轉換。
native2ascii -encoding UTF-8 messages_zh_CN.properties mys.txt
把mys.txt替換成messages_zh_CN.properties,運行ok!