Spring i18n - 令人困惑的默认语言环境

Spring i18n - Confusing default locales

使用一个非常简单的 Spring Rest HelloWorld example with intelliJ,我正在尝试添加国际化(Locale.US 作为默认设置,只是替代 messages_es.properties 以获得西班牙语版本).

这是我的 Java 配置文件:

@Bean
public LocaleResolver localeResolver(){
    SessionLocaleResolver localeResolver = new SessionLocaleResolver();
    localeResolver.setDefaultLocale(Locale.US);
    return localeResolver;
}

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

然后我有两个资源,每个资源只有一个条目:

messages.properties(默认):

good.morning.message=Good morning

messages_es.properties(默认):

good.morning.message=Buenos días

使用 "Accept-Language" header 参数从 Postman 对其进行测试,无论我设置什么值,它总是 returns 带有西班牙语单词的版本("Buenos días").即使设置 "en"、"en_GB" 或 "en_US" 等,也不会返回默认的英文版本。总是 "Buenos días".

但是,如果我只是将西班牙语更改为法语或其他语言,即将 messages_es.properties 重命名为 messages_fr.properties,它会正常工作。它总是 returns "Good Morning" 除非我在 header 参数中发送 "fr" ,在这种情况下它 returns "Bonjour" 或我在其中设置的任何文本法语版。

有什么想法吗?

我已经解决了。这是一个系统语言配置。我的 Mac 配置为西班牙语。 Spring 正在将 ES Locale 作为默认语言环境。

当我更改为英语并重新启动应用程序时,它确实以英语为默认语言。

我想知道是否可以做一些事情来跳过系统配置,所以只有 Spring 配置告诉实际语言是什么。