關於SpringMVC的國際化,http://www.cnblogs.com/liukemng/p/3750117.html這篇文章已經講的很好了。它講了有如下幾種國際化方式
1:基於Http的header信息的國際化(request.getLocale())
2:基於session的國際化(設置session的SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME
3:基於COOKIE的國際化
4:基於URL的國際化 (注意上面文章的第四種方法是錯誤的,因為spring的bean默認是單例,不要使用實例變量來保存狀態,這樣一個用戶改變狀態,所有用戶都改變狀態了)
基於session的實現方式要求有個入口的URL或者沒有URL中都要求加入一個LANG參數,不是很方便,有沒有一種方式我想加的時候加,不相加的是有使用前面的local 。經過實踐基於URL的國際化解決我的問題。
配置applicaton.xml;
<mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors> <bean id="localeResolver" class="com.sequoiadb.util.DBaasLocaleResolver"/>
實現DBaasLocaleResolver的方法
public class DBaasLocaleResolver extends AcceptHeaderLocaleResolver { public Locale resolveLocale(HttpServletRequest request) { HttpSession session=request.getSession(); Locale locale=(Locale)session.getAttribute("locale"); System.out.println("resolveLocale:"+locale.toString()); if (locale==null){ session.setAttribute("locale",request.getLocale()); return request.getLocale(); }else{ return locale; } } public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { System.out.println("setLocale:"+locale.toString()); request.getSession().setAttribute("locale",locale); } }
添加國際化文件
在src目錄下添加properties文件,中文轉碼要使用native2ascii.exe工具,這個是JDK自帶的。
在這里說下,上面提到的那篇文章的基於URL的國際化代碼有點問題,因為如果不帶locale會報空指針異常,所以我修改了邏輯,第一次根據瀏覽器來進行國際化所以使用了request.getLocale(), 如果url中有locale參數就返回mylocale ,這個mylocale對象的構造在哪調我也不太清楚
唯一的bug就是你的locale參數填寫錯誤也會默認使用瀏覽器來進行國際化,而不是使用上一次的locale。
