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

3

使用一个非常简单的Spring Rest HelloWorld示例和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

在Postman中使用"Accept-Language"头参数进行测试,无论我设置什么值,它总是返回西班牙语版本中的单词("Buenos días")。即使设置了"en"、"en_GB"或"en_US"等多种语言,也从未返回默认的英文版。始终是"Buenos días"。

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

有什么想法吗?


你是否实现了LocaleChangeInterceptor并将其添加到注册表中?https://www.baeldung.com/spring-boot-internationalization - bkbb
不需要了...我已经解决了。看看我的答案...(即将呈现) - ElPiter
1个回答

3
我已经解决了这个问题。这是一个系统语言配置问题。我将我的Mac配置为西班牙语。Spring采用ES Locale作为默认语言。
当我改成英语并重新启动应用程序时,它确实以英语作为默认语言。
我想知道是否有办法跳过系统配置,只让Spring配置告诉我们实际使用的语言。

2
可能是JVM选项 java -Duser.country=ES -Duser.language=es ... - bkbb
1
哇!兄弟!我哭了!谢谢你!我的A今天被烧得太厉害了...好吧,告诉你我今天遇到的问题。我刚开始学习Spring Boot和Thymeleaf,遇到了一个和你类似的bug。我按照这个教程https://www.baeldung.com/spring-boot-internationalization 设置了EN作为默认语言,RU和FR作为附加语言。当我访问/时,显示的是RU语言,这让我很困惑,因为我设置了EN作为默认语言。当我访问/?lang=FR时,一切正常,网站显示的是FR语言。但是当我访问/?lang=en时,却显示的是RU语言!**所以,兄弟们,在运行配置中添加-Duser.country=EN -Duser.language=en,因为我的该死的MacOS使用的是RU语言,把我搞疯了。干得好,伙计! - Стас Пишевский

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接