springMVC專案國際化(i18n)實現方法

funnyZpC發表於2017-07-22

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

 

 

 

相關文章