如何在 Thymeleaf 和 Spring Boot 中显示消息?

How to display messages in Thymeleaf and Spring Boot?

我创建了一个 Spring 使用 Thymeleaf 作为模板引擎的启动 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 吗?

P.S.:

在 'server side' 上,我可以使用 MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY) 获取消息。

消息源相对于类路径:

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

这是我为 thymeleaf 和 spring = http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

参考的教程

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

我解决 i18n 消息传递的方法是像您一样定义 MessagesSource bean。此外,我不得不覆盖 WebMvcConfigurerAdapter.

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

在此之后,它对我有用。

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

spring.messages.basename=i18n/messages

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

#messages
spring.messages.basename=i18n/messages

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

你不需要messageSource bean