I18n攔截器
I18nInterceptor 攔截器是針對於 web 應用程式提供的一個國際化元件,以下是在 freemarker 範本中使用的範例:
##//先將I18nInterceptor設定成全域攔截器
以上程式碼透過設定了 I18nInterceptor 攔截 action 請求,然後即可在 freemarker 範本檔案中透過名為_res 物件來取得國際化數據,I18nInterceptor 的具體工作流程如下:public void configInterceptor(Interceptors me) { me.add(new I18nInterceptor());
}
// 然後在freemarker中即可透過_res物件來取得國際化資料
${_res.get("msg")}
}
// 然後在freemarker中即可透過_res物件來取得國際化資料
${_res.get("msg")}
- l試圖從請求中透過controller.getPara(“_locale”)取得 locale 參數,如果取得到則將其保存到cookie 之中
- 如 果 controller.getPara(“_locale”) 沒 有 獲 取 到 參 數 值 , 則試圖試圖透過controller.getCookie(“_locale”)得到 locale 參數
- 如果以上兩步驟仍然沒有取得 locale 參數值,則使用 I18n. defaultLocale 的值做為 locale 值來使用
- 使用 前 面 三 步 中 得 到 的 locale 值 , 透過 I18n.use #controller.setAttr(“_res”, res)將 Res 物件傳遞給頁面使用如果 I18nInterceptor. isSwitchView 為 true 值的話還會改變 render 的 view 值,實現整體範本檔案的切換,詳情可查看原始碼。
以上步驟 I18nInterceptor 中的變數名稱」_locale」、」_res」都可以在建立 I18nInterceptor 物件時進行指定,不指定時將使用預設值。也可以透過繼承 I18nInterceptor 並且覆寫 getLocalPara、 getResName、getBaseName 來客製化更個人化的功能。
際化切換,只需將 I18nInterceptor.isSwitchView 設定為true 即可,省時省力。