SpringMVC(12) - 使用區域設置

參考:https://docs.spring.io/spring/docs/4.3.20.RELEASE/spring-framework-reference/htmlsingle/#mvc-localeresolver

 

Spring的體系結構的大多數部分都支持國際化,就像Spring Web MVC框架一樣。 DispatcherServlet可以使用客戶端的區域設置自動解析消息。這是通過LocaleResolver對象完成的。

當請求進入時,DispatcherServlet會查找區域設置解析器,如果找到它,則會嘗試使用它來設置區域設置。使用RequestContext.getLocale()方法,始終可以檢索由區域設置解析器解析的區域設置。

除了自動locale解析之外,還可以將攔截器附加到處理器映射以在特定情況下更改locale,例如,基於請求中的參數。

Locale解析器和攔截器在org.springframework.web.servlet.i18n包中定義,並以正常方式在應用程序上下文中進行配置。以下是Spring中包含的區域設置解析器的選擇。

 

1.  獲取時區信息
除了獲取客戶端的區域外,瞭解其時區通常也很有用。 LocaleContextResolver接口提供LocaleResolver的擴展,允許解析器提供更豐富的LocaleContext,其中可能包含時區信息。

可以使用RequestContext.getTimeZone()方法獲取用戶的TimeZone。時區信息將由Spring的ConversionService註冊的Date/Time  Converter和Formatter對象自動使用。

 

2. AcceptHeaderLocaleResolver
該區域設置解析器檢查客戶端(例如,Web瀏覽器)發送的請求中的accept-language請求頭。通常,此請求頭字段包含客戶端操作系統的區域設置信息。此解析程序不支持時區信息。

 

3. CookieLocaleResolver
此區域設置解析器檢查客戶端上可能存在的Cookie,以查看是否指定了Locale或TimeZone。如果是,則使用指定的詳細信息。使用此區域設置解析器的屬性,可以指定cookie的名稱以及最大存活時間。在下面找到定義CookieLocaleResolver的示例。

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="cookieName" value="clientlanguage"/>
    <!-- 單位:秒,假如設置爲-1, 則cookie不會持久化(當瀏覽器關閉時被刪除) -->
    <property name="cookieMaxAge" value="100000"/>
</bean>

CookieLocaleResolver屬性

屬性 默認值 描述

cookieName

classname + LOCALE

cookie的名稱

cookieMaxAge

Servlet container default

Cookie在客戶端上存在的最長時間。 如果指定-1,則不會保留cookie;它只有在客戶端關閉瀏覽器之後纔可用。

cookiePath

/

限制cookie對網站某個部分的可見性。 指定cookiePath時,cookie只對該路徑及其下方的路徑可見。

 

4. SessionLocaleResolver

SessionLocaleResolver允許從可能與用戶請求關聯的會話中檢索Locale和TimeZone。 與CookieLocaleResolver相比,此策略將本地選擇的區域設置存儲在Servlet容器的HttpSession中。 因此,這些設置對於每個會話來說都是臨時的,因此在每個會話終止時都會丟失。

請注意,與Spring Session項目等外部會話管理機制沒有直接關係。 此SessionLocaleResolver將簡單地針對當前的HttpServletRequest評估和修改相應的HttpSession屬性。

 

5. LocaleChangeInterceptor

可以通過將LocaleChangeInterceptor添加到其中一個處理器映射來更改區域設置。 它將檢測請求中的參數並更改區域設置。 它在LocaleResolver上調用setLocale(),它也存在於上下文中。

以下示例顯示所有請求*.view資源,同時也包含名爲siteLanguage的參數時,將更改區域設置。 因此,例如,對以下URL的請求http://www.sf.net/home.view?siteLanguage=nl會將站點語言更改爲荷蘭語。

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="siteLanguage"/>
</bean>

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="localeChangeInterceptor"/>
        </list>
    </property>
    <property name="mappings">
        <value>/**/*.view=someController</value>
    </property>
</bean>

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章