Как отображать сообщения в Thymeleaf и Spring Boot?

Я создал веб-приложение Spring Boot, которое использует Thymeleaf в качестве механизма шаблона. Я сконфигурировал 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>

Что мне не хватает? Нужно ли настраивать дополнительные beans?

P.S:.

На "стороне сервера" я могу получить сообщение с помощью MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY).

Ответы

Ответ 1

Поскольку я использую Spring Boot, MessageSource настроен с MessageSourceAutoConfiguration. Эти параметры можно легко изменить в файле application.properties. В моем случае мне пришлось добавить в этот файл следующее:

spring.messages.basename=i18n/messages

Ответ 2

И добавьте это в свой application.properties файл

#messages
spring.messages.basename=i18n/messages

и сохраните файл в правильной папке, как указано выше.

вам не нужно messageSource bean

Ответ 3

Как я решил, что обмен сообщениями i18n состоял в том, чтобы определить MessagesSource bean, как вы. Кроме того, мне пришлось переопределить метод getValidator() WebMvcConfigurerAdapter.

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

После этого это сработало для меня.

Ответ 4

Источник сообщения будет относиться к пути к классам:

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

Вот учебник, на который я ссылался для тимелеафа и spring= http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

Ответ 5

Есть ли файл messages.properties (no _de) для возврата? Это работает? Ваш браузер установлен в локаль DE_de?