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