|
对于最新的稳定版本,请使用 Spring Framework 6.2.7! |
现场
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。
时区
除了获取客户端的区域设置之外,了解其时区通常也很有用。
这LocaleContextResolverinterface 提供了对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>