【问题标题】:How to display messages in Thymeleaf and Spring Boot?如何在 Thymeleaf 和 Spring Boot 中显示消息?
【发布时间】:2015-06-14 10:41:25
【问题描述】:

我创建了一个使用 Thymeleaf 作为模板引擎的 Spring Boot Web 应用程序。我将MessageSource 配置为在子文件夹中查找消息:

@Bean
public MessageSource messageSource() {
    final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

    messageSource.setBasename("i18n/messages");
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setCacheSeconds(0);

    return messageSource;
}

在这个文件夹中,我创建了文件messages_de.properties,内容为ticket.type.BUG=Fehler。在我的模板中,我尝试显示如下文本:

<p th:text="#{ticket.type.BUG}">BUG</p>

但是当页面被渲染时,我得到以下信息:

<p>??ticket.type.BUG_de_DE??</p>

我错过了什么?我是否必须配置任何其他 bean?

附注:

在“服务器端”,我可以使用MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY) 获取消息。

【问题讨论】:

    标签: spring spring-mvc spring-boot thymeleaf


    【解决方案1】:

    并将其添加到您的 application.properties 文件中

    #messages
    spring.messages.basename=i18n/messages
    

    并将文件存储在上面指定的正确文件夹中。

    你不需要messageSource bean

    【讨论】:

    • 对不起。我看不出来。顺便说一句,下次您可以选择它作为答案,这样我们就可以清楚地看到它。而且您不必对提供帮助的努力投反对票。
    【解决方案2】:

    我解决 i18n 消息传递的方式是像你一样定义 MessagesSource bean。此外,我必须重写 WebMvcConfigurerAdaptergetValidator() 方法。

    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
        validator.setValidationMessageSource( messageSource() );
        return validator;
    }
    

    在这之后,它对我有用。

    【讨论】:

    • 这并不能解决我的问题,我不知道为什么会这样。此配置与我不使用的 JSR-303 验证有关。
    【解决方案3】:

    因为我使用的是 Spring Boot,所以 MessageSource 配置了 MessageSourceAutoConfiguration。这些设置可以在application.properties 文件中轻松更改。就我而言,我必须将以下内容添加到此文件中:

    spring.messages.basename=i18n/messages
    

    【讨论】:

    • 这很聪明。我虽然spring.messages.basename 仅指每个文件的前缀。不知道它包括文件夹。
    • 我有同样的问题并且有这个配置,但这对我不起作用..
    【解决方案4】:

    是否存在允许回退的文件messages.properties(没有_de)?它有效吗?您的浏览器是否设置为区域设置 DE_de

    【讨论】:

    • 是的(英文)。不。是的。
    【解决方案5】:

    消息源是相对于类路径的:

    messageSource.setBasename("  classpath:i18n/messages");
    

    这是我为 thymeleaf 和 spring = http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html 参考的教程

    【讨论】:

    • 我不这么认为。我已经更新了我的问题。当我添加“类路径:”时,我也无法在 Java 代码中获取消息。
    猜你喜欢
    • 2021-06-03
    • 2016-08-13
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2019-01-02
    • 2018-04-03
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多