?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
Spring架構(gòu)的絕大部分都支持國際化,Spring的web MVC框架也不例外。
DispatcherServlet
允許使用客戶端本地化信息自動解析消息。
這個工作由LocaleResolver
對象完成。
當收到請求時,DispatcherServlet
查找一個本地化解析器,如果找到,就使用它設置本地化信息。
通過RequestContext.getLocale()
方法,總可以獲取由本地化解析器解析的客戶端的本地化信息。
除自動的本地化解析以外,還可以將一個攔截器置于處理器映射中(參考 第?13.4.3?節(jié) “攔截器(HandlerInterceptor
)”),
以便在某種環(huán)境下可以改變本地化信息,例如,可以基于請求中的參數(shù)變更本地化信息。
本地化解析器和攔截器都定義在org.springframework.web.servlet.i18n
包中,
可以在應用的上下文中配置它們。下文介紹了一些Spring提供的本地化解析器。
這個本地化解析器檢查請求中客戶端瀏覽器發(fā)送的accept-language
頭信息,
通常這個HTTP Header包含客戶端操作系統(tǒng)的本地化信息。
這個本地化解析器檢查客戶端中的Cookie
是否包含本地化信息。
如果有的話,就使用。當配置這個解析器的時候,可以指定cookie名,以及cookie的最長生存期(Max Age)。
下面這個例子定義了一個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>
表?13.5.?CookieLocaleResolver
的屬性
屬性 | 缺省值 | 描述 |
---|---|---|
cookieName | classname + LOCALE | cookie的名字 |
cookieMaxAge | Integer.MAX_INT | cookie在客戶端存在的最長時間。如果該值是-1,這個cookie只被保留在內(nèi)存中,當客戶關閉瀏覽器時,這個cookie就不存在了 |
cookiePath | / | 通過這個參數(shù),可以將該cookie的作用限制在一部分特定的。 具體地說,只有該目錄(cookiePath)及其子目錄下的頁面可以使用這個cookie |
可以使用LocaleChangeInterceptor
修改本地化信息。
這個攔截器需要被添加到處理器映射中(參考第?13.4?節(jié) “處理器映射(handler mapping)”)。
它可以偵測請求中某個特定的參數(shù),然后調(diào)用上下文中的LocaleResolver中的 setLocale()方法,相應地修改本地化信息。
<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>
在上面這個例子中,所有對*.view
資源的請求,只要包含參數(shù)siteLanguage
,
都會改變本地化信息。比如下面這個請求http://www.sf.net/home.view?siteLanguage=nl
會將網(wǎng)站語言修改為荷蘭語。