Итак, я стараюсь делать свой проект с интернализацией. я делаю
Если я помещу их в свой / resources /, все будет нормально работать с ResourceBundleMessageSource в моем контексте. Но я хочу изменить папку, например, на C: \ Apache \ servicemix \ etc \ conf \ messages.
И когда я сделал что-то подобное
Servicemix пишет
ResourceBundle [file:C:/Apache/servicemix/etc/conf/messages/Messages] not found for MessageSource: Can't find bundle for base name file:C:/Apache/servicemix/etc/confi/messages/Messages, locale en
В режиме отладки Servicemix я попытался получить правильное сообщение из своих свойств, и оно работает, когда я делаю что-то вроде
ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
messageSource.setBasename("file:C:/Apache/servicemix/etc/configurator/messages/Messages");
messageSource.getMessage("next",null,new Locale("en"));
Я понимаю, что мне нужно. Я хочу использовать это в своем контексте. Но привести к ошибке:
Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.springframework.context.support.ReloadableResourceBundleMessageSource] to required type [org.springframework.context.support.ResourceBundleMessageSource] for property 'messageSource': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:267)
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:449)
... 140 more
Почему не работает? Я использую чистый Spring, а не SpringBoot
@ M.Deinum, спасибо. Вы были правы. У меня был 1 ResourceBundleMessageSource для MessageSource в одном из моих контекстов. Как выбрать свой комментарий в качестве ответа? ;-)




Сообщение об ошибке, которое вы получаете, связано с тем, что где-то в вашей кодовой базе вы используете ResourceBundleMessageSource как тип. Вероятно, в классе, у которого есть поле этого типа.
Вместо использования конкретного типа ResourceBundleMessageSource вы должны использовать вместо него общий интерфейс MessageSource. Таким образом, не имеет значения, какую реализацию вы выберете.
Спасибо за помощь)
Вы программируете против
ResourceBundleMessageSourceкак типа (где-то поля) вместоMessageSource(интерфейса, который вы должны использовать вместо конкретного типа).