2012-09-25 83 views
0

情景:在应用我有作为模板来生成电子邮件语言相关的属性文件:如何在几个ResourceBundles之间共享区域独立属性?

email-subscription_en.properties

email.subject=You are successfully subscribed to list {0} 
email.body=... 

email-cancellation_en.properties

email.subject=You are successfully unsubscribed from list {0} 
email.body=... 

等。现在,在Spring上下文我想有这些捆绑:

<util:properties id="commonMailProperties"> 
    <prop key="email.from">[email protected]</prop> 
    <prop key="email.to">{0}@company.org</prop> 
</util:properties> 

怎么可能:

<bean id="subscriptionMailProperties" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="org.company.email-subscription" /> 
</bean> 

<bean id="cancellationMailProperties" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="org.company.email-cancellation" /> 
</bean> 

与我想在上下文中宣布这些共同的语言无关性合并?

回答

1

据我所知,没有这方面的支持。您正尝试将配置与资源包混合使用。我感觉你现在拥有的是正确的。如果你没有保持它的豪华,因为它是,这里是(多一个黑客攻击)的方式

  1. 实现org.springframework.context.MessageSource与“commonMailProperties”(java.util.Properties)的依赖,并说这个bean ID作为'commonMessageSource'。

  2. 'getMessage'实现从'commonMailProperties'中获取值。

  3. 为'parentMessageSource'属性注入'commonMessageSource'为'subscriptionMailProperties'和'cancellationMailProperties'。

0

如果有人有兴趣完整的解决方案:

  • 创建PropertiesMessageSource类:

    /** 
    * {@link org.springframework.context.MessageSource} implementation that resolves messages via underlying 
    * {@link Properties}. 
    */ 
    public class PropertiesMessageSource extends AbstractMessageSource { 
    
        private Properties properties; 
    
        /** 
        * Set properties to use. 
        */ 
        public void setProperties(Properties properties) { 
         this.properties = properties; 
        } 
    
        @Override 
        protected MessageFormat resolveCode(String code, Locale locale) { 
         String property = properties.getProperty(code); 
    
         if (property == null) { 
          return null; 
         } 
    
         return createMessageFormat(property, locale); 
        } 
    } 
    
  • 使用它:

    <bean id="commonMailProperties" class="org.company.PropertiesMessageSource"> 
        <property name="properties"> 
         <props> 
          <prop key="email.from">[email protected]</prop> 
          <prop key="email.to">{0}@company.org</prop> 
         </props> 
        </property> 
    </bean> 
    <bean id="subscriptionMailProperties" class="org.springframework.context.support.ResourceBundleMessageSource"> 
        <property name="basename" value="org.company.email-subscription" /> 
        <property name="parentMessageSource"> 
         <ref bean="commonMailProperties"/> 
        </property> 
    </bean> 
    
0

ResourceBundleMessageSource(更确切地说:所有AbstractMessageSource的后代)现在有commonMessages属性,它可以保存与区域无关的值。例如,当您想要邮件主题和正文区域设置相关时,某些属性(邮件发送和邮件发送)在所有包中都是通用的(请检查SPR-10291):

<bean id="mailProperties" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="org.mycompany.email" /> 
    <property name="commonMessages"> 
     <props> 
      <prop key="email.from">[email protected]</prop> 
      <prop key="email.to">%[email protected]</prop> 
     </props> 
    </property> 
</bean> 
相关问题