我正在使用Spring 3.1,并且想找到当前用户有效的语言环境,有没有一种方法可以直接获取语言环境,而不必强制将其从控制器传递给服务层...等等。
spring是否将语言环境存储在线程本地存储中,可以通过调用某些静态方法来获取它?
Answers:
我也一直在寻找如何在不经过环境的情况下访问语言环境的方法Locale
,但是我对Spring还是很陌生,发现大多数解决方案令人困惑。但是事实证明,Spring MVC确实将语言环境存储在线程本地存储中。可以通过以下方式访问它:
Locale locale = LocaleContextHolder.getLocale();
最后一种方法是基于线程本地的,以便在体系结构的任何实体中提供当前的语言环境。[...]您必须注意,默认情况下,LocaleContextHolder的内容对应于Web请求中指定的语言环境。
来自:使用Spring MVC 3配置语言环境切换。(该文章还提供了用于获取语言环境的替代配置/方法,这对于希望这样做的任何人可能都是有用的)。
您也可以在此处查看LocaleContextHolder
Spring的文档。
这取决于您配置为在会话中还是在cookie中存储区域设置的位置?
在我的应用程序中,我已经配置为使用以下提到的配置在其会话中存储用户区域设置。
<mvc:interceptors>
<ref bean="localeChangeInterceptor"/>
</mvc:interceptors>
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"/>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en"/>
</bean>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>/WEB-INF/i18n/labels</value>
<value>/WEB-INF/i18n/messages</value>
<value>/WEB-INF/i18n/include</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
如果您已完成上述操作,则可以轻松地从会话中检索locale参数。
希望这对您有所帮助。
干杯。
我们有同样的需要,所以有把想出了Locale
到ThreadLocal
上下文。我们已经在ThreadLocal
上下文中存储了一个对象(一些用户信息),因此只需将其附加(看起来像hack,但是我们找到的最快的解决方案)。