Spring MVC Locale 本地化示例詳解
通過RequestContext.getLocale()獲取到對(duì)應(yīng)的Locale
Spring各模塊都支持國(guó)際化,SpringMVC也同樣支持。DispatcherServlet通過Locale Resovler自動(dòng)根據(jù)客戶端的Locale支持國(guó)際化。
request請(qǐng)求上來后,DispatcherServlet查找并設(shè)置Locale Resovler,我們可以通過RequestContext.getLocale()獲取到對(duì)應(yīng)的Locale。
此外,可以利用攔截器在特定情況下修改locale,比如,根據(jù)請(qǐng)求參數(shù)修改locale。這項(xiàng)功能對(duì)于通過頁面選項(xiàng)指定locale的應(yīng)用非常有用(比如在頁面上選擇中文/英文的方式指定應(yīng)用的語言)。
Locale Resolver和攔截器定義在org.springframework.web.servlet.i18n包,可以通過配置文件指定,Spring支持如下locale resolver:
- Time Zone
- Header Resolver
- Cookie Resovlver
- Session Resolver
- Locale Interceptor
Time Zone
除獲取用戶locale之外,有時(shí)候也需要獲取到用戶的時(shí)區(qū),LocaleContextResolver接口通過擴(kuò)展LocaleResovler可提供對(duì)時(shí)區(qū)的支持。
可通過RequestContext.getTimeZone() 獲取用戶時(shí)區(qū)。
Header Resolver
Header Resolver通過解析請(qǐng)求頭的accept-language,從而獲取到客戶端瀏覽器發(fā)送上來的相關(guān)頭信息。
SpringMVC提供的Header Resolver:AcceptHeaderLocaleResolver。
瀏覽器默默認(rèn)會(huì)發(fā)送相關(guān)的請(qǐng)求頭信息:

SpringMVC通過DispatcherServlet.properties指定的默認(rèn)LocaleResolver正是Header Resolver:
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
Cookie Resolver
檢查客戶端發(fā)送上來的請(qǐng)求的cookie中是否包含Locale或TimeZone信息,如包含則應(yīng)用該信息創(chuàng)建Locale。
SpringMVC提供的Cookie Resolver:org.springframework.web.servlet.i18n.CookieLocaleResolver。
通過如下方式配置:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="clientlanguage"/>
<!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) -->
<property name="cookieMaxAge" value="100000"/>
</bean>Session Resolver
SessionLocaleResolver通過session獲取客戶端的Locale和TimeZone信息,信息存儲(chǔ)在HttpSession中,隨著session的失效而失效。
Locale Interceptor
使用攔截器、通過頁面參數(shù)設(shè)置Locale。SpringMVC提供了一個(gè)LocaleChangeInterceptor攔截器,可以直接使用。
比如:
<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>配置localeChangeInterceptor,指定其參數(shù)名稱為siteLanguage,將該攔截器配置到SimpleUrlHandlerMapping上,對(duì)*.view請(qǐng)求,根據(jù)請(qǐng)求參數(shù)siteLanguage決定其locale。
以上就是Spring MVC Locale 本地化示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC Locale 本地化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot使用Maven插件進(jìn)行項(xiàng)目打包的方法
這篇文章主要介紹了SpringBoot使用Maven插件進(jìn)行項(xiàng)目打包的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Java關(guān)鍵字volatile和synchronized作用和區(qū)別
這篇文章主要為大家詳細(xì)介紹了Java關(guān)鍵字volatile和synchronized的作用和區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
淺談Java數(shù)值類型的轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換
這篇文章主要介紹了Java數(shù)值類型的轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
完美解決idea moudle沒有藍(lán)色的小方塊的問題
這篇文章主要介紹了完美解決idea moudle沒有藍(lán)色的小方塊的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java泛型機(jī)制與反射原理相關(guān)知識(shí)總結(jié)
今天帶大家學(xué)習(xí)的是關(guān)于Java進(jìn)階的相關(guān)知識(shí),文章圍繞著Java泛型機(jī)制與反射原理展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Java中通過繼承Thread類創(chuàng)建線程的步驟
本文介紹了如何通過繼承Thread類創(chuàng)建線程,包括Thread類的定義、創(chuàng)建線程的步驟、優(yōu)缺點(diǎn)、使用場(chǎng)景和注意事項(xiàng),通過示例代碼展示了多線程下載文件的實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧2025-02-02
SpringMVC自定義參數(shù)綁定實(shí)現(xiàn)詳解
這篇文章主要介紹了SpringMVC自定義參數(shù)綁定實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
springboot配置log日志按天按類緩存實(shí)現(xiàn)過程
文章介紹了如何配置Spring Boot項(xiàng)目中的`application.yml`文件,并在同級(jí)目錄下創(chuàng)建`logback-spring.xml`文件以自定義日志設(shè)置,最后,展示了運(yùn)行結(jié)果的圖示2026-01-01
java異常處理執(zhí)行順序詳解try catch finally
try catch語句是java語言用于捕獲異常并進(jìn)行處理的標(biāo)準(zhǔn)方式,對(duì)于try catch及try catch finally執(zhí)行順序必須有深入的了解2021-10-10

