Spring默认语言环境不能像我预期的那样运行CookieLocaleResolver

时间:2017-04-18 11:46:03

标签: java spring spring-mvc internationalization

我要翻译的文字有两个文件:

messages_es_ES.properties messages_en_US.properties

我正在使用CookieLocaleResolver:

@Bean
public LocaleResolver localeResolver() {
    CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
    cookieLocaleResolver.setCookieName("language");
    cookieLocaleResolver.setCookieMaxAge(3600);
    cookieLocaleResolver.setDefaultLocale(new Locale("es_ES"));
    return cookieLocaleResolver;
}

这个LocaleChangeInterceptor:

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {        
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
    localeChangeInterceptor.setParamName("language");
    return localeChangeInterceptor;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
}

在我的jsp中,我使用这个链接:

<a href="?language=en_US">EN</a> 
<a href="?language=es_ES">ES</a>

一切正常,当我点击一个链接时语言被正确更改,但是当我启动应用程序时,所有内容都以英语显示(在系统区域设置中,更具体),即使我设置了&#34; es_ES&#34;作为默认语言环境。

2 个答案:

答案 0 :(得分:2)

解决了,我将属性setFallbackToSystemLocale从ResourceBundleMessageSource更改为false,如@noobandy here所述。 现在一切都按预期工作了。

答案 1 :(得分:0)

您可以将默认语言环境设置如下:

   @Bean
   public MessageSource messageSource() {
      ResourceBundleMessageSource messageSource=new ResourceBundleMessageSource();
      messageSource.setBasename("messages");
      // SET DEFAULT LOCALE AS WELL
      Locale.setDefault(Locale.US);
      return messageSource;
   }

当语言环境为空时,AbstractMessageSource调用Locale.getDefault()