【问题标题】:Why do I need Spring Boot `messages.properties` instead of just `messages_en.properties`?为什么我需要 Spring Boot `messages.properties` 而不仅仅是 `messages_en.properties`?
【发布时间】:2018-11-19 16:19:32
【问题描述】:

我正在关注this guide,它说将默认消息文件命名为messages.properties。为什么我不能将其命名为 messages_en.properties 并将默认语言环境设置为英语?

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

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

事实上,当我将浏览器默认语言设置为法语并拥有messages_fr.properties,然后重新启动服务器时,它也无法找到法语的密钥。

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

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 这是 Spring Boot 使用的默认解析器,因此您无法拥有用户可选择的语言。作为AcceptHeaderLocaleResolver。为此,您需要 SessionLocaleResolverCookieLocaleResolver(如果在会话或 cookie 中找不到任何内容,则默认为接受标头,最后是默认值)。
    • 嗯,SessionLocaleResolver 没有默认为 Accept-Language 标头,因为没有会话属性,所以它必须被破坏。这是一个错误页面;无需用户可选择的语言。
    • 如果没有选择默认语言环境,它将回退。您正在设置默认的英语,以便使用它。仅当您不设置此选项时才会回退到接受标头。
    • 你自相矛盾。第一次你说它搜索会话/cookie,然后是Accept-Language 标头,最后是默认值。第二个你说它在Accept-Language 标头之前使用默认语言环境。
    • 我并没有自相矛盾。如前所述,它检查会话,然后根据是否设置了默认语言环境,它将返回如果未设置,它将在接受标头中查找值。如果它回退到接受头取决于您是否设置了默认值(接受头在最后一个中使用)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2021-03-21
    • 2016-02-15
    • 1970-01-01
    相关资源
    最近更新 更多