1. 程式人生 > >springMVC項目國際化(i18n)實現方法

springMVC項目國際化(i18n)實現方法

需要 默認 p s pca soft block 視圖 語言切換 -s

SpringMVC項目國際化(i18n)實現方法

  按照作息規律,每周五晚必須是分享知識的時間\(^o^)/~,這周講點兒啥呢,項目需要逼格,咱們國際化吧(* ̄rǒ ̄)~,項目中碰到這類需求的童鞋可能並不多,但偶爾用到也會比較費時間滴;-),不如駐足本帖片刻吧︿( ̄︶ ̄)︿

  額,嗯~,記得一開始從事軟件開發時在一個很輕量級的項目中碰到了一個貌似叼炸天的需求,什麽?國際化?沒聽說過,不知道怎麽玩兒。。。,谷歌翻帖快一周,大神們的神貼也看了許久,可就是解決不了我的項目需求,怎麽辦,加大神Q騷擾之~~(@^_^@)~,在正式寫此文前特別要感謝“Erola”,他的原貼:http://www.cnblogs.com/liukemng/p/3750117.html,請在看本博之前先膜拜下大神的博文吧(⊙ ▽ ⊙),由於大神已經將國際化的集中用法都講清楚了,遂,在此我會著重講下實際開發中我所碰到的一個問題~

  我們的需求其實很簡單,就是客戶為方便歪果仁使用他們的系統,在界面上設置兩個用於語言切換的link(中文|EN),切換後當前頁面功能保持不變(就是不跳轉),需要的時候手動切換,默認基於語言和位置的國際化就直接pass了(切換瀏覽器語言位置以切換頁面語言),當然也不能在每個視圖解析時讓每個controller都順帶切換語言邏輯,這樣可行,但對寫代碼來說~太過冗余!

  遂,比較可行的辦法是基於關鍵字請求的頁面切換,憋了老久,容我先上圖哈~,如圖>>>just like this to that--->

  技術分享

技術分享

  SpringMVC自身是支持(這裏使用的是spring-3.2),不用單獨寫代碼來 實現頁面的語言切換,看似很靠譜,但~,請註意,由於這個項目是內網使用的不涉及到增刪改,所以之前把頁面都放在WEB-INF外部,就像這樣:

技術分享

(所有controller只做數據處理)導致的一個問題是點到其他頁面後頁面語言又被還原了!為這個問題翻帖搞了許久許久,一直不明白為什麽,在這裏我總結下:所有不經過controller視圖解析的目標頁面都不會應用指定的語言區域!!!,切記,這個很重要很重要。

  已看過以上至理名言後,解決的辦法其實很簡單,在每個目標頁面對應的controller裏面加上一個默認的頁面跳轉,這樣:

技術分享

這樣,只要切換語言,就不會出現上面提到的問題,明白以上的問題所在,以下就按部就班的配置:

  首先,需要在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

springMVC項目國際化(i18n)實現方法