我有一些不一致之处,我需要一些专家建议。我使用Spring MVC的3.2Spring MVC:spring之间的区别:消息和请求区域设置
有了这个豆:
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<property name="defaultEncoding" value="UTF-8"/>
<property name="cacheSeconds" value="10" /> <!-- for easier development -->
</bean>
<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.CookieLocaleResolver">
<property name="defaultLocale" value="en"/>
</bean>
和两个diferent消息文件:
messages.properties
messages_es.properties
当使用Spring标签的语言环境解析为 “ES”,并使用messages_es为预计(这是我的系统郎)。
但是,如果我尝试以编程方式获取区域设置,我总是会得到“en”。我试过这个选项:
选项1:
@Autowired
private LocaleResolver localeResolver;
....
localeResolver.resolveLocale(request);
选项2:
LocaleContextHolder.getLocale();
方案3:
RequestContextUtils.getLocale(request);
所有这些都以“en”lang结果。
问题是,我如何获得春季使用的语言环境:消息标签?
Acording的文档,
当一个请求时,DispatcherServlet寻找一个本地化解析器,如果找到它就使用它来设置语言环境。使用RequestContext.getLocale()方法,您始终可以检索由区域设置解析程序解析的区域设置。
但是,所有我在最终的HTML文本是在“ES”和此方法返回“EN”
关于拦截器:将拦截器声明为一个bean是不够的,你应该使用mvc:interceptor或[简单URL映射](http://docs.spring.io/spring/docs/2.5.6 /reference/mvc.html#mvc-handlermapping-interceptor) – MPavesi