SpringMVC項目國際化(i18n)實現方法html
按照做息規律,每週五晚必須是分享知識的時間\(^o^)/~,這周講點兒啥呢,項目須要逼格,我們國際化吧(* ̄rǒ ̄)~,項目中碰到這類需求的童鞋可能並很少,但偶爾用到也會比較費時間滴;-),不如駐足本帖片刻吧︿( ̄︶ ̄)︿web
額,嗯~,記得一開始從事軟件開發時在一個很輕量級的項目中碰到了一個貌似叼炸天的需求,什麼?國際化?沒據說過,不知道怎麼玩兒。。。,谷歌翻帖快一週,大神們的神貼也看了許久,可就是解決不了個人項目需求,怎麼辦,加大神Q騷擾之~~(@^_^@)~,在正式寫此文前特別要感謝「Erola」,他的原貼:http://www.cnblogs.com/liukemng/p/3750117.html,請在看本博以前先膜拜下大神的博文吧(⊙ ▽ ⊙),因爲大神已經將國際化的集中用法都講清楚了,遂,在此我會着重講下實際開發中我所碰到的一個問題~spring
咱們的需求其實很簡單,就是客戶爲方便歪果仁使用他們的系統,在界面上設置兩個用於語言切換的link(中文|EN),切換後當前頁面功能保持不變(就是不跳轉),須要的時候手動切換,默認基於語言和位置的國際化就直接pass了(切換瀏覽器語言位置以切換頁面語言),固然也不能在每一個視圖解析時讓每一個controller都順帶切換語言邏輯,這樣可行,但對寫代碼來講~太過冗餘!瀏覽器
遂,比較可行的辦法是基於關鍵字請求的頁面切換,憋了老久,容我先上圖哈~,如圖>>>just like this to that--->mvc
SpringMVC自身是支持(這裏使用的是spring-3.2),不用單獨寫代碼來 實現頁面的語言切換,看似很靠譜,但~,請注意,因爲這個項目是內網使用的不涉及到增刪改,因此以前把頁面都放在WEB-INF外部,就像這樣:app
(全部controller只作數據處理)致使的一個問題是點到其餘頁面後頁面語言又被還原了!爲這個問題翻帖搞了許久許久,一直不明白爲何,在這裏我總結下:全部不通過controller視圖解析的目標頁面都不會應用指定的語言區域!!!,切記,這個很重要很重要。eclipse
已看過以上至理名言後,解決的辦法其實很簡單,在每一個目標頁面對應的controller裏面加上一個默認的頁面跳轉,這樣:jsp
這樣,只要切換語言,就不會出現上面提到的問題,明白以上的問題所在,如下就循序漸進的配置:this
首先,須要在web-context.xml裏面將i18n的bean配置到攔截器內(只需看第二行),以便在每一個視圖解析的時候都能應用到國際化--->編碼
1 <mvc:interceptors>
2 <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
3 <bean class="com.hst.core.spring.HttpCacheInterceptor"/>
4 </mvc:interceptors>
然~,在WEB-INF下面的resources內增長這兩個文件:
這裏是中英文切換,若是有其它語言,則每種語言都單獨寫一個properties語言配置文件,請注意文件的命名。
再~,在jsp頁面眉頭聲明spring的標籤庫:
再~,將之前每一個頁面顯示的中文文本的地方用spring的message標籤替換:
別忘記 :每一個標籤內的code的值是前面properties中對應的key,回頭看看properties的內容就明瞭~--->
如此,就差最後一步,也是最簡單的一步:界面添加link,通常只須要在主jsp裏面添加就能夠了,位置自定哈~,告訴你個小祕密,你只須要這樣就OK (~ ̄▽ ̄)~
OK~終於完成~,分享知識是快樂的,祝你們週末愉快玩兒得happyヾ(o◕∀◕)ノヾ
======小建議======
properties文件裏面的中文默認只顯示成Unicode編碼,若有大量的文本須要添加,建議使用properties editor插件,eclipse安裝此插件請參考:http://www.cnblogs.com/panie2015/p/5637847.html