此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

现场

Spring 架构的大部分部分都支持国际化,如 Spring Web MVC 框架可以。DispatcherServlet允许您自动解决邮件 通过使用客户端的区域设置。这是通过LocaleResolver对象。spring-doc.cadn.net.cn

当请求进入时,DispatcherServlet查找语言环境解析器,如果 找到一个,它尝试使用它来设置区域设置。通过使用RequestContext.getLocale()方法,您始终可以检索由区域设置解析器解析的区域设置。spring-doc.cadn.net.cn

除了自动区域设置解析之外,您还可以将拦截器附加到 处理程序映射(有关处理程序的更多信息,请参阅拦截 映射拦截器)来更改特定情况下的语言环境(例如, 基于请求中的参数)。spring-doc.cadn.net.cn

语言环境解析器和拦截器在org.springframework.web.servlet.i18n包,并在应用程序中配置 上下文以正常方式。以下区域设置解析器选择包含在 Spring。spring-doc.cadn.net.cn

时区

除了获取客户端的区域设置外,了解其时区通常也很有用。 这LocaleContextResolver接口提供了对LocaleResolver这让 解析器提供了更丰富的LocaleContext,其中可能包括时区信息。spring-doc.cadn.net.cn

如果可用,用户的TimeZone可以通过使用RequestContext.getTimeZone()方法。自动使用时区信息 在任何日期/时间ConverterFormatter向 Spring 的ConversionService.spring-doc.cadn.net.cn

标头解析器

此区域设置解析器检查accept-language发送的请求中的标头 由客户端(例如,Web 浏览器)。通常,此标头字段包含 客户端的作系统。请注意,此解析器不支持时区 信息。spring-doc.cadn.net.cn

此区域设置解析器检查Cookie客户端上可能存在,以查看LocaleTimeZone被指定。如果是,它将使用指定的详细信息。通过使用 属性,您可以指定 cookie 的名称以及 最大年龄。以下示例定义了CookieLocaleResolver:spring-doc.cadn.net.cn

<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:spring-doc.cadn.net.cn

会话解析器

SessionLocaleResolver让您检索LocaleTimeZone从 会话,可能与用户的请求相关联。与CookieLocaleResolver,则此策略将本地选择的区域设置存储在 Servlet 容器的HttpSession.因此,这些设置是临时的 因此,在每个会话结束时丢失。spring-doc.cadn.net.cn

请注意,与外部会话管理机制没有直接关系, 比如 Spring Session 项目。这SessionLocaleResolver评估和 修改相应的HttpSession属性与当前HttpServletRequest.spring-doc.cadn.net.cn

语言环境拦截器

您可以通过添加LocaleChangeInterceptor设置为HandlerMapping定义。它检测请求中的参数并更改区域设置 因此,调用setLocale方法LocaleResolver在调度程序的 应用程序上下文。下一个示例显示,对所有*.view资源 包含名为siteLanguage现在更改区域设置。因此,例如, 对 URL 的请求,www.sf.net/home.view?siteLanguage=nl,更改站点 语言到荷兰语。以下示例演示如何拦截区域设置:spring-doc.cadn.net.cn

<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>