我正在关注this guide,并说将默认消息文件命名为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
文本。
实际上,当我将浏览器默认语言设置为法语并具有messages_fr.properties
并重新启动服务器时,它也同样找不到法语的密钥。
不使用Thymeleaf。无需允许用户选择语言。
参考:https://docs.spring.io/spring-boot/docs/1.5.17.RELEASE/reference/htmlsingle/(世界“国际化”的一个实例,仅涉及应用程序属性)。
答案 0 :(得分:1)
我改用AcceptHeaderLocaleResolver
来解决它。
@Bean
public LocaleResolver localeResolver() {
AcceptHeaderLocaleResolver ahlr = new AcceptHeaderLocaleResolver();
ahlr.setDefaultLocale(Locale.ENGLISH);
return ahlr;
}
我以为指南说它将在会话,cookie或标题中搜索语言环境,但是他们只是说不同的子类分别实现了这些功能。
LocaleResolver接口具有可根据会话,cookie,Accept-Language标头或固定值确定当前语言环境的实现。
我通过设置此application property来解决了实时重载问题,至少在调试时如此:
spring.messages.cache-seconds=1
我还设置了此属性,以免弄乱我的src/main/resources
文件夹,因此我可以将所有邮件文件移到locales/
子目录中。
spring.messages.basename=locales/messages