|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
现场
Spring 架构的大部分部分支持国际化,如 Spring 网页
MVC 框架可以。调度器服务可以让你自动解析消息
通过使用客户所在的位置。这是用LocaleResolver对象。
当有请求进来时,调度器服务查找一个位置解析器,如果
找到一个后,它尝试用它来设置位置。通过使用RequestContext.getLocale()方法中,你总可以检索到由该区域解析器解析的区域。
除了自动定位解析,你还可以在 处理器映射(详见拦截,了解更多处理程序信息) 映射拦截器)以便在特定情况下改变地点(例如, 基于请求中的参数)。
位置解析器和拦截器定义在org.springframework.web.servlet.i18n在你的应用中配置了 和
以正常的方式提供背景信息。以下选择的地点解析器包括在
Spring。
时区
除了获取客户所在地外,了解其时区通常也很有用。
这LocaleContextResolver接口提供扩展LocaleResolver这使得
解析器提供更丰富的地点背景,可能包含时区信息。
如果有,用户的时区可以通过使用以下条件得到RequestContext.getTimeZone()方法。时区信息会自动使用
按任何日期/时间转炉和福尔马特这些对象被Spring注册转换服务.
Cookie解析器
该位置解析器检查饼干客户端可能存在,以查看是否现场或时区被指定。如果是这样,它会使用指定的细节。通过使用
该 locale 解析器的属性,你可以指定 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:
| 属性 | 默认值 | 描述 |
|---|---|---|
|
类别名称 + 地区 |
饼干的名字 |
|
Servlet 容器默认 |
cookie在客户端上持续存在的最长时间。如果 |
|
/ |
限制Cookie的可见性仅限于你网站的某个部分。什么时候 |
会话解析器
这SessionLocaleResolver让你取回现场和时区来自
可能与用户请求相关的会话。与CookieLocaleResolver该策略将本地选择的地点设置存储在
Servlet 容器HttpSession.因此,这些设置都是暂时的
对于每个会话,因此在每次会话结束时 都丢失。
请注意,它与外部会话管理机制没有直接关系,
例如春季课程项目。这SessionLocaleResolver评估和
修改相应的HttpSession属性对水流HttpServletRequest.
地点拦截者
你可以通过添加地点变化拦截者到其中一个处理器映射定义。它检测请求中的参数并更改所在位置
因此,将setLocale方法LocaleResolver在调度员的
应用上下文。下一个例子展示了调用所有*。视图资源
包含一个参数网站语言现在换了个场景。例如,
请求 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>