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

时间:2018-11-18 22:08:22

标签: spring spring-mvc spring-boot spring-internationalization

我正在关注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/(世界“国际化”的一个实例,仅涉及应用程序属性)。

1 个答案:

答案 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