首页 > 解决方案 > 为什么我需要 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 and havemessages_fr.properties并重新启动服务器时,它也找不到法语的密钥。

不使用百里香叶。无需允许用户选择语言。

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

标签: springspring-mvcspring-bootspring-internationalization

解决方案


我改用它来修复它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

推荐阅读