为什么我需要Spring Boot`messages.properties`而不是`messages_en.properties`?


问题内容

我正在遵循本指南,并说将默认消息文件命名为messages.properties。为什么不能命名messages_en.properties并将默认语言环境设置为英语?

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

这是行不通的(每次message.properties重命名时都必须硬停止并重新启动服务器-
动态重新加载无法获取更改)。它将打印出default带有诸如之类的标签的文本,<spring:message code="oops" text="default"/>因为找不到messages_en.properties

实际上,当我将浏览器的默认语言设置为French并具有messages_fr.properties并重新启动服务器时,它也同样找不到法语的键。

不使用Thymeleaf。无需允许用户选择语言。

参考:https : //docs.spring.io/spring-
boot/docs/1.5.17.RELEASE/reference/htmlsingle/
(世界上只有一个“国际化”实例,并且仅与应用程序属性有关)。


问题答案:

AcceptHeaderLocaleResolver改用修复它。

@Bean
public LocaleResolver localeResolver() {
    AcceptHeaderLocaleResolver ahlr = new AcceptHeaderLocaleResolver();
    ahlr.setDefaultLocale(Locale.ENGLISH);
    return ahlr;
}

我以为该指南说它将在会话,cookie或标题中搜索语言环境,但他们只是说不同的子类分别实现了这些功能。

LocaleResolver接口具有一些实现,这些实现可以根据会话,cookie,Accept-Language标头或固定值来确定当前语言环境。

我通过设置此应用程序属性(至少用于调试)解决了实时重载问题:

spring.messages.cache-seconds=1

我还设置了此属性,以免使src/main/resources文件夹混乱,因此可以将所有邮件文件移到locales/子目录中。

spring.messages.basename=locales/messages