0

シナリオ: アプリケーションには、電子メールを生成するためのテンプレートとして使用される言語依存のプロパティ ファイルがあります。

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 のコンテキストでは、これらのバンドルが必要です。

<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>

コンテキストで宣言したいこれらの共通の言語に依存しないプロパティとマージされます。

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

それはどのように可能ですか?

4

3 に答える 3

1

私の知る限り、これに対するサポートはありません。構成とリソース バンドルを混在させようとしています。あなたが今持っているものは正しいと思います。そのままにしておく余裕がない場合は、ここに方法があります(ハックのようなものです)

  1. 「commonMailProperties」(java.util.Properties) を依存関係として実装org.springframework.context.MessageSourceし、Bean ID を「commonMessageSource」とします。

  2. 「getMessage」実装では、「commonMailProperties」から値を取得します。

  3. 「parentMessageSource」プロパティの「subscriptionMailProperties」と「cancellationMailProperties」に「commonMessageSource」を注入します。

于 2012-09-25T20:14:59.160 に答える
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">noreply@company.org</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>
    
于 2012-09-26T14:33:47.610 に答える
0

ResourceBundleMessageSource(より正確には、 のすべての子孫AbstractMessageSource)に、commonMessagesロケールに依存しない値を保持できるプロパティが追加されました。たとえば、メールの件名と本文をロケールに依存させたい場合、一部のプロパティ (mail from と mail to) はすべてのバンドルで共通です ( 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">empty@mydomain.org</prop>
            <prop key="email.to">%s@mydomain.org</prop>
        </props>
    </property>
</bean>
于 2013-04-15T14:56:01.160 に答える