Spring启动 - 无法设置默认Locale

时间:2018-01-04 09:11:58

标签: java spring-boot locale properties-file

我现在正在开发Spring Boot应用程序(只有休息控制器)。我的服务器的每个请求都包含语言标记。我想根据此标记发送特定语言的回复。控制器从请求中提取这些标记,并作为Locale实例提供给服务层。我在src / main / resources下创建了属性文件,如下所示:   https://i.stack.imgur.com/fsXPG.jpg

我的问题是默认语言。无论提供的Locale如何,从属性文件返回的消息始终来自AppResources_pl.properties。我认为,问题在于默认语言环境。现在我尝试了两种不同的方法,但仍然不知道如何将默认属性文件设置为英语。

首先:

ResourceBundle myResources = ResourceBundle.getBundle("AppResources", currentLocale);
String message = myResources.getString("label.error");

第二

@Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.forLanguageTag("en-US"));
        return slr;
    }

    @Bean
    public MessageSource messageSource(){
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("AppResources");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

并在服务中:

messageSource.getMessage("label.error", null, locale)

两种方式都返回消息但始终来自AppResources_pl.properties。如果在* .properties文件下找不到提供的区域设置,我如何将AppResources.properties设置为默认属性文件?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

/*
 * Create MessageSource bean
 */
@Bean
public MessageSource messageSource() {
  ReloadableResourceBundleMessageSource messageSource = new 
  ReloadableResourceBundleMessageSource();
  messageSource.setBasename("classpath:AppResources");
  messageSource.setDefaultEncoding("UTF-8");
  return messageSource;
}

/*
 * Create LocaleResolver Bean
 */
@Bean
public LocaleResolver localeResolver(){
  CookieLocaleResolver resolver = new CookieLocaleResolver();
  resolver.setDefaultLocale(new Locale("en")); // your default locale
  return resolver;
}

答案 1 :(得分:1)

我发现在MessageSourceAccessor默认语言环境为null,因此使用了系统语言环境。此问题出现在最新版本中,因为大约6个月前我使用原始评论配置提供LocaleResolver并且它工作正常。

解决了以下问题return new MessageSourceAccessor(messageSource, Locale.US);(直接通过Locale

的问题
@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource getMessageSource() {
    final ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
    res.setDefaultEncoding("UTF-8");
    res.addBasenames("classpath:messages/validation", "classpath:messages/messages", "classpath:messages/titles");
    return res;
}


@Bean
public MessageSourceAccessor getMessageSourceAccessor(final MessageSource messageSource) {
    return new MessageSourceAccessor(messageSource, Locale.US);
}