Issue
I am trying to use resource bundles with Spring's Message Source. Here is the way I am doing it:
@Component
public class MessageResolver implements MessageSourceAware {
@Autowired
private MessageSource messageSource;
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
public String getMessage(){
return messageSource.getMessage("user.welcome", new Object[]{"Rama"} , Locale.US);
}
}
And here is my folder structure:
messages_en_US.properties contains just one line:
user.welcome=Welcome {0}
Here is the xml configuration used:
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>resourcebundles/messages</value>
</property>
</bean>
Here is the error I am getting:
WARNING: ResourceBundle [resourcebundles/messages] not found for MessageSource: Can't find bundle for base name resourcebundles/messages, locale en_US
Exception in thread "main" org.springframework.context.NoSuchMessageException: No message found under code 'user.welcome' for locale 'en_US'.
But if I move my resource bundle to directly under the resources folder, it is working fine. In this case, here is the xml configuration I am using:
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>messages</value>
</property>
Is is that if I have to use ResourceBundleMessageSource, I should put my resource bundles directly under the resources? If i have to keep it in specified folder only, is there any other way to get this one work?
Thanks!
Solution
Change your configuration to the following for messageSource bean in your xml file.
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>classpath*:resourcebundles/messages</value>
</property>
</bean>
Since all your properties files are in classpath of java you need to define the path with prefix classpath*:
otherwise it will look into the web directory of your application.
Hope this helps you. Cheers.
Answered By - Japan Trivedi