Java Spring启动-无法设置默认区域设置

Java Spring启动-无法设置默认区域设置,java,spring-boot,locale,properties-file,Java,Spring Boot,Locale,Properties File,我现在正在开发SpringBoot应用程序(仅限rest控制器)。对我的服务器的每个请求都包含语言标记。我想根据此标签发送特定语言的响应。控制器从请求中提取这些标记,并作为区域设置实例提供给服务层。我在src/main/resources下创建了属性文件,如下所示: 我的问题是默认语言。无论提供的语言环境如何,从属性文件返回的消息始终来自AppResources_pl.properties。我认为,问题在于缺省语言环境。现在我尝试了两种不同的方法,但仍然不知道如何将默认属性文件设置为英语 第一

我现在正在开发SpringBoot应用程序(仅限rest控制器)。对我的服务器的每个请求都包含语言标记。我想根据此标签发送特定语言的响应。控制器从请求中提取这些标记,并作为区域设置实例提供给服务层。我在src/main/resources下创建了属性文件,如下所示:

我的问题是默认语言。无论提供的语言环境如何,从属性文件返回的消息始终来自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\u pl.properties。如果在*.properties files下找不到提供的区域设置,如何将AppResources.properties设置为默认属性文件?

您可以尝试以下操作:

/*
 * 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;
}

我发现在
MessageSourceAccessor
中,默认区域设置为null,因此使用了系统区域设置。这个问题出现在最新版本中,因为大约6个月前,我使用了原始注释配置中提供的
LocaleResolver
,它工作得很好

解决了以下行中的问题
返回新的MessageSourceAccessor(messageSource,Locale.US)(直接传递的
区域设置


现在,我得到了每个区域设置代码的以下错误:“对于区域设置,在代码‘error.reportNotFromApp’下找不到消息”。您可以将默认区域设置放在这里:
resolver.setDefaultLocale(新区域设置(“defaultLocale”))
我这样做了,但仍然从AppResources_pl.properties而不是AppResources_en.properties或AppResources.properties.In/src/main/resources/folder获取消息,您是否为两种语言创建了两个消息文件:“AppResources_en.properties”和“AppResources_pl.properties””“是的。现在我有三个messagess文件:1.AppResources.properties 2。AppResources\u pl.properties和AppResources\u en.properties.请注意,如果随后自动连接
MessageSourceAccessor
bean并使用
getMessage(String code)
,它将只使用您在此处设置的区域设置,而不会检查区域设置上下文持有者的区域设置。
@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource getMessageSource() {
    final ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
    res.setDefaultEncoding("UTF-8");
    res.setFallbackToSystemLocale(false); // will force to use specified locale even if locale for current env is different
    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);
}