Spring: Не найдено ни одного сообщения по коду для locale 'en_US'
ApplicationContext-Service.xml
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list><value>messages</value></list>
</property>
</bean>
У меня есть messages_en_US.properties в /src/messages _en_US.properties
registerForm.passwordNotMatch=Password does not match.
Это строка кода вызывает ошибку:
binding.addError(new FieldError(REGISTER_FORM, "passwordNotMatch", messageSource.getMessage("registerForm.passwordNotMatch", null, locale)));
Ошибка: сообщение не найдено в коде 'registerForm.passwordNotMatch' для локали 'en_US'.
Что может быть неправильным?
Ответы
Ответ 1
работает, если вы измените на:
classpath:messages
?
У меня возникло ощущение, что при использовании ReloadableResourceBundleMessageSource
в jsp не будет найден файл свойств. добавив classpath:
до того, как basename
решила мою проблему.
Хорошо, хотя мой проект управлялся maven, я думаю, вы все равно можете попробовать.
Ответ 2
У меня была такая же проблема. Я пробовал classpath:
, но это не помогло. Закончилось включение возврата каретки в последнюю строку моего файла свойств (поэтому курсор находится на следующей строке, которая является концом файла).
Кроме того, если вы используете Maven и поместите свой файл свойств следующим образом: /resources/xxxx.properties
, каталог ресурсов автоматически втягивается в вашу сгенерированную войну, поэтому classpath:
не требуется.
Ответ 3
Для тех, кто использует аннотацию @Bean
для bundleMessageSource
.
Добавьте имя для @Bean
.
name="messageSource"
Используйте то же имя, которое мы использовали для создания объекта MessageSource
в классе @RestController
@RestController
public class HelloWorldController {
@Autowired
private MessageSource messageSource;
@GetMapping(path = "/hello-world-internationalized")
public String helloWorldInternationalized(@RequestHeader(name = "Accept-Language", required = false) Locale locale) {
return messageSource.getMessage("good.morning.message", null, locale);
}
}
Затем в классе @SpringBootApplication
@Bean(name="messageSource")//wont work without the bean name
public ResourceBundleMessageSource bundleMessageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
Ссылка на эту ссылку
Ответ 4
Я думаю, вместо <property name="basenames">
он должен быть <property name="basename">
.