2011-04-11 78 views
20

我的messages.properties實際上是一個很大的文件。 所以,我想在messages.properties移動的一些屬性到一個新的文件,說newmessages.properties和更新的Spring bean配置XML與這兩個文件如下:spring i18n:多屬性文件的問題

<bean id="messageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:i18n/messages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
</bean> 

<bean id="anotherMessageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:i18n/newmessages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
</bean> 

但是,我不能夠訪問新屬性文件中定義的任何屬性。 真的可以指定多個屬性文件(對於單個區域設置)嗎?

回答

40

的基本名稱(s末)屬性接受基本名稱的數組:

設置基本名稱的陣列,每個上述的特殊約定以下。解析消息代碼時,將依次檢查關聯的資源包。

@see Java文檔:ReloadableResourceBundleMessageSource.setBasenames

所以,你應該只有一個信息源,與列表文件(嘗試通過逗號seperatate它們)。

<bean id="anotherMessageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames" value="classpath:i18n/newmessages,classpath:i18n/messages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
</bean> 
19

另一個乾淨的方式做同樣的:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basenames"> 
      <list> 
       <value>classpath:messages1</value> 
       <value>classpath:messages2</value> 
      </list> 
     </property> 
     <property name="defaultEncoding" value="UTF-8"/> 
</bean> 
+0

說我有message1_en,message2_en和m發送連接爲Locale那個時候怎麼春會來知道哪個文件要拍? @spgodara – 2016-02-18 10:47:01

1

替代解決方案已經提到將那些通過屬性parentMessageSource各位代表的信息查找到父,如果它不存在於當前發現實例。

在你的情況下,可能會更好地留在basenames陣列。如果消息源使用不同的實現,那麼擁有層次消息源可能更有意義。例如。第二個從db讀取消息。

請注意,在這種情況下,當Spring找到MessageSource的兩個實例時,所以主節點將是編號爲messageSource的節點。

<bean id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="parentMessageSource"><ref bean="anotherMessageSource"/></property> 
    <property name="basename" value="classpath:i18n/messages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
</bean> 

<bean id="anotherMessageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:i18n/newmessages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
</bean>