Spring使用攔截器支持國際化很方便,使用時只須要兩個步驟:web
一.spring配置spring
具體配置方式以下:瀏覽器
<!-- 資源文件綁定器,文件名稱:messages.properties(沒有找到時的默認文件), messages_en.properties(英文),messages_zh_CN.properties(中午),等等-->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> cookie
<property name="basename" value="config.messages.messages" /> session
</bean>mvc
<!-- 定義本地化變動攔截器 -->
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />app
<util:list id="interceptors">
<ref bean="localeChangeInterceptor" />
</util:list>url
<!-- 定義註解URL映射處理器 ,全部的請求映射必須關聯本地化攔截器-->
<bean id="urlMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors" ref="interceptors" />
<property name="order" value="1"></property>
</bean>code
這時還須要本地化處理器進行處理,有三種處理器,以下:繼承
<!-- 定義本地化處理器 -->
1. 基於session
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
2. 基於請求
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"/>
3.基於cookie
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
以上三種處理器理論上配置任意一個就能夠,不過有兩點須要注意:
1)第二個不能直接使用,須要經過繼承重寫相應的方法,以下:
public class MyLocaleResolver extends AcceptHeaderLocaleResolver{
private Locale myLocal;
public Locale resolveLocale(HttpServletRequest request) {
return myLocal==null?request.getLocale():myLocal;
}
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
myLocal = locale;
}
}
修改配置文件中的localeResolver配置,class指向這個類就能夠了。
2)第一與第三個用法相同,只不過前者使用session,session過時就須要從新設置,然後者使用cookie,能夠根據項目的具體狀況進行選擇。
通常來講,使用第一種和第三種比較常見。
二.使用方法
當不作處理時默認會使用瀏覽器本身的語言設置,若是想改變語言,只須要在請求後面加上一個參數便可,
默認的參數名爲locale,裏面放的就是你的提交參數,如:en_US,zh_CN之類的,
因此,只須要在頁面上加上相應的連接便可,以下:
<a href="xxx.do?locale=zh_CN">中文</a>
<a href="xxx.do?locale=en">英文</a>
頁面中使用jstl或spring標籤,以下:
<fmt:message key="test.app"/>
<s:message code="test.app"/>
不管使用哪一種處理器,locale設置過一次就能夠了,不須要每一個鏈接後面都加上locale參數。