Spring使用攔截器支持國際化(轉)

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參數。

相關文章
相關標籤/搜索