此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
现场
Spring 架构的大部分部分都支持国际化,如 Spring Web
MVC 框架可以。DispatcherServlet
允许您自动解决邮件
通过使用客户端的区域设置。这是通过LocaleResolver
对象。
当请求进入时,DispatcherServlet
查找语言环境解析器,如果
找到一个,它尝试使用它来设置区域设置。通过使用RequestContext.getLocale()
方法,您始终可以检索由区域设置解析器解析的区域设置。
除了自动区域设置解析之外,您还可以将拦截器附加到 处理程序映射(有关处理程序的更多信息,请参阅拦截 映射拦截器)来更改特定情况下的语言环境(例如, 基于请求中的参数)。
语言环境解析器和拦截器在org.springframework.web.servlet.i18n
包,并在应用程序中配置
上下文以正常方式。以下区域设置解析器选择包含在
Spring。
时区
除了获取客户端的区域设置外,了解其时区通常也很有用。
这LocaleContextResolver
接口提供了对LocaleResolver
这让
解析器提供了更丰富的LocaleContext
,其中可能包括时区信息。
如果可用,用户的TimeZone
可以通过使用RequestContext.getTimeZone()
方法。自动使用时区信息
在任何日期/时间Converter
和Formatter
向 Spring 的ConversionService
.
Cookie 解析器
此区域设置解析器检查Cookie
客户端上可能存在,以查看Locale
或TimeZone
被指定。如果是,它将使用指定的详细信息。通过使用
属性,您可以指定 cookie 的名称以及
最大年龄。以下示例定义了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>
下表描述了属性CookieLocaleResolver
:
属性 | 默认值 | 描述 |
---|---|---|
|
类名 + 语言环境 |
Cookie 的名称 |
|
Servlet 容器默认值 |
Cookie 在客户端上保留的最长时间。如果 |
|
/ |
将 cookie 的可见性限制在您网站的特定部分。什么时候 |
会话解析器
这SessionLocaleResolver
让您检索Locale
和TimeZone
从
会话,可能与用户的请求相关联。与CookieLocaleResolver
,则此策略将本地选择的区域设置存储在
Servlet 容器的HttpSession
.因此,这些设置是临时的
因此,在每个会话结束时丢失。
请注意,与外部会话管理机制没有直接关系,
比如 Spring Session 项目。这SessionLocaleResolver
评估和
修改相应的HttpSession
属性与当前HttpServletRequest
.
语言环境拦截器
您可以通过添加LocaleChangeInterceptor
设置为HandlerMapping
定义。它检测请求中的参数并更改区域设置
因此,调用setLocale
方法LocaleResolver
在调度程序的
应用程序上下文。下一个示例显示,对所有*.view
资源
包含名为siteLanguage
现在更改区域设置。因此,例如,
对 URL 的请求,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>