Я хочу прочитать свойство в файле messages.properties. Но когда я звоню
messageSource.getMessage("property", null, Locale.getDefault())
Я получаю исключение NoSuchMessageException.
Я уже пытался переименовать свой файл messages.properties в messages_de_DE.properties и использовать Locale.GERMANY, но разницы нет.
Файл находится в src/main/resources
Это мой стартовый класс:
@SpringBootApplication
public class Start extends SpringBootServletInitializer {
public static void main(final String[] args) {
SpringApplication.run(Start.class, args);
}
@Bean
public MessageSource messageSource() {
final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath*:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean validator(final MessageSource messageSource) {
final LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource);
return bean;
}
}
Что я делаю неправильно?
Попробуйте что-то вроде этого:
@Configuration
public class MessageConfig {
private final MessageSource source;
private final MessageSourceAccessor accessor;
@Autowired
public MessageConfig(MessageSource messageSource) {
this.accessor = new MessageSourceAccessor(this.source = messageSource, new Locale("de", "DE"));
}
@Bean
public Validator validator() {
LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean();
factory.setValidationMessageSource(this.source);
return factory;
}
public String get(String msg) {
try {
Assert.hasText(msg, "message code must be not blank");
return this.accessor.getMessage(msg.trim());
} catch (NoSuchMessageException e) {
return '{' + msg + '}';
}
}
}
Пожалуйста, используйте существующие MessageSource
и поместите файлы свойств в /src/main/resources
.
Кроме того, попробуйте переименовать файл сообщения как messages_de.properties
.
Спасибо, ваш ответ помог мне исправить это. Я удалил свои пользовательские определения Bean, и это сработало.
Вы хотите отобразить его в HTML? если да, при использовании Thymeleaf просто сделайте
th:text = "${messageLabel}"
или с JSP<spring:message code = "messageLabel"/>
и измените свои свойства на формат messages_de.properties