我有一些不一致的地方,我需要一些专家的建议。我正在使用 Spring MVC 3.2
有这个豆子:
<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>
还有两个不同的消息文件:
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 产生。
问题是,如何获取 spring:message 标签使用的语言环境?
根据文档,
当一个请求进来时,DispatcherServlet 会寻找一个区域设置解析器,如果它找到一个,它会尝试使用它来设置区域设置。使用 RequestContext.getLocale() 方法,您始终可以检索由语言环境解析器解析的语言环境。
但是我在最终 html 中的所有文本都在“es”中,这个方法返回“en”