我有一些不一致之處,我需要一些專家建議。我使用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