私のmessages.propertiesは本当に大きなファイルです。そこで、messages.propertiesのいくつかのプロパティを新しいファイル、たとえばnewmessages.propertiesに移動し、次のように両方のファイルでSpringBean構成xmlを更新してみました。
<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>
しかし、新しいプロパティファイルで定義されているプロパティにアクセスできません。 (単一のロケールに対して)複数のプロパティファイルを指定することは本当に可能ですか?
ベース名(最後にs
)プロパティは、ベース名の配列を受け入れます。
ベース名の配列を設定します。各ベース名は、上記の特別な規則に従います。メッセージコードを解決するときに、関連するリソースバンドルが順番にチェックされます。
@see Java doc: ReloadableResourceBundleMessageSource.setBasenames
したがって、リストファイルを含むメッセージソースは1つだけにする必要があります(コンマで区切るようにしてください)。
<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>
同じことを行う別のクリーンな方法:
<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>
すでに述べたものの代替ソリューションは、現在のインスタンスでメッセージルックアップが見つからない場合にメッセージルックアップを親に委任するプロパティparentMessageSource
を使用することです。
あなたの場合、おそらくbasenames
配列のままにしておく方が良いでしょう。メッセージソースが異なる実装を使用している場合は、階層的なメッセージソースを使用する方が理にかなっています。例えば。 2番目はdbからのメッセージを読み取ります。
この場合、SpringがMessageSource
の2つのインスタンスを検出すると、プライマリインスタンスはIDが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>
それら(私のような)のために、Java構成ソリューションを探しています:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("i18n/messages", "i18n/newmessages");
return messageSource;
}