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)
.
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
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
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.
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
?
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