来自外部jar问题的Spring UTF-8消息资源

时间:2014-07-25 13:13:15

标签: java spring utf-8 internationalization

我在Spring MVC应用程序中遇到UTF-8消息源的问题。我尝试过两种AbstractMessageSource实现:ResourceBundleMessageSource和ReloadableResourceBundleMessageSource。我有一个外部jar,其中包含com.mypackage.i18n包中的i18n消息

ResourceBundleMessageSource的配置:

<bean id="propertiesMessageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="com.mypackage.i18n.messages" />
    <property name="useCodeAsDefaultMessage" value="true" />
</bean>

此配置加载查找和加载属性,但因UTF-8而失败,因为此实现不支持UTF-8。

ReloadableResourceBundleMessageSource的配置:

<bean id="propertiesMessageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="com.mypackage.i18n.messages" />
    <property name="useCodeAsDefaultMessage" value="true" />
    <property name="fileEncodings" value="UTF-8" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>

此配置找不到属性。我知道这个具有可重新加载资源的实现需要将属性放在WEB-INF目录中的某个位置,如果不需要重新加载资源,它不会将资源限制在其他位置。 根据类java:

  

请注意,设置为“basenames”属性的基本名称的处理方式与ResourceBundleMessageSource的“basenames”属性略有不同。它遵循基本的ResourceBundle规则,即不指定文件扩展名或语言代码,但可以引用任何Spring资源位置(而不是仅限于类路径资源)。使用“classpath:”前缀,仍然可以从类路径加载资源,但“cache”除“-1”之外的值(永远缓存)在这种情况下不起作用。

有人可以建议我如何解决问题:我需要使用另一种方法或以某种方式修改ReloadableResourceBundleMessageSource的配置以从jar中查找资源?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。适当的ReloadableResourceBundleMessageSource配置如下所示:

<bean id="propertiesMessageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:com/mypackage/i18n/messages" />
    <property name="useCodeAsDefaultMessage" value="false" />
    <property name="fileEncodings" value="UTF-8" />
    <property name="defaultEncoding" value="UTF-8" />
    <property name="cacheSeconds" value="-1"/>
</bean>