Mes messages.properties est vraiment un gros fichier. J'ai donc essayé de déplacer certaines propriétés de messages.properties vers un nouveau fichier, par exemple newmessages.properties et de mettre à jour la configuration XML du bean printanier avec les deux fichiers comme suit:
<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>
Cependant, je ne peux pas accéder aux propriétés définies dans le nouveau fichier de propriétés. Est-il vraiment possible de spécifier plusieurs fichiers de propriétés (pour une seule locale)?
La propriété basenames (s
à la fin) accepte un tableau de noms basiques:
Définissez un tableau de noms de base, chacun suivant la convention spéciale susmentionnée. Les ensembles de ressources associés seront vérifiés séquentiellement lors de la résolution d'un code de message.
@voir Java doc: ReloadableResourceBundleMessageSource.setBasenames
Vous ne devriez donc avoir qu’une seule source de messages, avec une liste de fichiers (essayez de les séparer par une virgule).
<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>
Une autre façon propre de faire la même chose:
<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>
Une solution alternative à celles déjà mentionnées serait d'utiliser la propriété parentMessageSource
qui délègue la recherche de message au parent si ce dernier ne le trouve pas dans l'instance actuelle.
Dans votre cas, il vaut probablement mieux rester avec le tableau basenames
. Avoir la source de message hiérarchique pourrait avoir plus de sens si les sources de message utilisaient des implémentations différentes. Par exemple. le second lit les messages de db.
Notez que dans ce cas, lorsque Spring trouve deux instances de MessageSource
, la principale sera celle avec l'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>
Pour ceux (comme moi) à la recherche d'une solution de configuration Java:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("i18n/messages", "i18n/newmessages");
return messageSource;
}