Spring framework: сообщений не найдено по коду для локали
Это мое объявление MessageResource
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- Auto-detect controllers in this package -->
<context:component-scan base-package="levelup.world.web" />
<!-- Prepend /WEB-INF/jsp/ and append .jsp to the view name -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- Access resource bundles with the specified basename -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
p:basename="/WEB-INF/messages/" />
</beans>
При запуске приложения эта ошибка отображается
No message found under code 'country.plural' for locale 'fil_PH'
теперь внутри моей папки сообщений внутри web-inf, у меня есть следующие свойства сообщения
messages_en.properties
messages_fr.properties
messages.properties
Что мне здесь не хватает?
Ответы
Ответ 1
В общем, такая проблема возникает не из-за языковой небытия, а потому, что MessageBundle
настроена неправильно. В вашем случае вам, похоже, нужно удалить "/" в вашем базовом имени.
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
p:basename="/WEB-INF/messages" />
Почему это так:
Если у вас есть пакет messages.properties
и messages_en.properties
, тогда имя пакета messages
. Если они есть в папке WEB-INF
, то basename /WEB-INF/messages
, то есть согласно /path/to/bundle/bundlename
. Если в папке /WEB-INF/messages
есть messages.properties
, то соответствующее базовое имя /WEB-INF/messages/messages
.
Ответ 2
Для загрузки spring вам нужно что-то вроде этого:
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/classes/messages");
return messageSource;
}
Ответ 3
Вы также можете указать в Spring boot application.properties
# INTERNATIONALIZATION
spring.messages.basename=i18n/messages
spring.messages.encoding=UTF-8
Ответ 4
Для ресурсов весенней загрузки вам необходимо добавить имя Bean:
@Bean(name="messageSource")
public ResourceBundleMessageSource bundleMessageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}