我有一些不一致之处,需要一些专家意见。我正在使用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(这是我的系统lang)。

但是,如果我尝试以编程方式获取语言环境,则总会得到“ 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”

最佳答案

好吧,我会回答自己。我对它进行了足够深入的调试,以发现问题是ReloadableResourceBundleMessageSource定义中缺少属性。现在,添加fallbackToSystemLocale = false并删除localeResolver中的默认语言环境,现在语言环境在请求中解析为“ es”。

到目前为止,一切都很好。遗憾的是,通过“?lang = en”参数更改语言环境的部分不起作用,但这是另一回事。

解析度:

<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="2" />
    <property name="fallbackToSystemLocale" value="false" />
</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" />




LocaleContextHolder.getLocale();

07-24 09:47
查看更多