我正在尝试使用Spring的Message Source资源包.这是我这样做的方式:
@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);
}
}
这是我的文件夹结构:
messages_en_US.properties只包含一行:
user.welcome=Welcome {0}
这是使用的xml配置:
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>resourcebundles/messages</value>
</property>
</bean>
这是我得到的错误:
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'.
但是,如果我将资源包直接移动到资源文件夹下,它工作正常.在这种情况下,这是我正在使用的xml配置:
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>messages</value>
</property>
是的,如果我必须使用ResourceBundleMessageSource,我应该将我的资源包直接放在资源下?如果我必须将它保存在指定的文件夹中,还有其他方法可以使这个工作吗?
谢谢!
解决方法:
将配置更改为xml文件中的messageSource bean的以下内容.
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>classpath*:resourcebundles/messages</value>
</property>
</bean>
由于所有属性文件都在java的类路径中,因此您需要使用前缀classpath *定义路径:否则它将查看应用程序的Web目录.
希望这对你有所帮助.干杯.