web-dev-qa-db-fra.com

Comment afficher des messages dans Thymeleaf et Spring Boot?

J'ai créé une application Web Spring Boot qui utilise Thymeleaf comme moteur de gabarit. J'ai configuré la MessageSource pour rechercher des messages dans un sous-dossier:

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

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

    return messageSource;
}

Dans ce dossier, j'ai créé le fichier messages_de.properties avec le contenu ticket.type.BUG=Fehler. Dans mon modèle, j'essaie d'afficher le texte comme suit:

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

Mais lorsque la page est rendue, je reçois le texte suivant:

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

Qu'est-ce que je rate? Dois-je configurer des beans supplémentaires?

P.S .:

Du côté du serveur, je peux obtenir le message avec MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY).

16
stevecross

Comme j'utilise Spring Boot, la MessageSource est configurée avec un MessageSourceAutoConfiguration . Ces paramètres peuvent être facilement modifiés dans le fichier application.properties. Dans mon cas, j'ai dû ajouter ce qui suit à ce fichier:

spring.messages.basename=i18n/messages
27
stevecross

Et ajoutez ceci à votre fichier application.properties

#messages
spring.messages.basename=i18n/messages

et stockez le fichier dans le bon dossier, comme indiqué ci-dessus.

vous n'avez pas besoin de haricot messageSource

4
Faraj Farook

J'ai résolu la messagerie i18n en définissant le bean MessagesSource comme vous. De plus, j'ai dû remplacer la méthode getValidator() de WebMvcConfigurerAdapter.

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

Après cela, cela a fonctionné pour moi.

2
Michael RHöse

Existe-t-il un fichier messages.properties (no _de) présent pour permettre le repli? Est-ce que ça marche? Votre navigateur est-il paramétré sur locale DE_de?

0
fkurth

La source du message doit être relative à classpath:

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

Voici un tutoriel que j'ai référencé pour thymeleaf et spring = http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

0
Paul John