为什么我需要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