springboot mvc messagesource i18n framework example spring internationalization

mvc - Spring i18n: problema con varios archivos de propiedades



spring mvc message properties (4)

La propiedad de los nombres de base ( s al final) acepta una matriz de nombres de base:

Establezca una matriz de nombres de base, cada uno siguiendo la convención especial mencionada anteriormente. Los paquetes de recursos asociados se verificarán secuencialmente al resolver un código de mensaje.

@ver java doc: ReloadableResourceBundleMessageSource.setBasenames

Por lo tanto, solo debe tener una fuente de mensajes, con una lista de archivos (intente separarlos por comas).

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

Mis messages.properties es realmente un archivo grande. Entonces, intenté mover algunas de las propiedades en messages.properties a un nuevo archivo, digamos newmessages.properties y actualicé el xml de configuración de bean bean con ambos archivos de la siguiente manera:

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

Pero, no puedo acceder a ninguna de las propiedades definidas en el nuevo archivo de propiedades. ¿Es realmente posible especificar varios archivos de propiedades (para una sola configuración regional)?


Otra forma limpia de hacer lo mismo:

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



Una solución alternativa a las que ya se mencionaron sería utilizar la propiedad parentMessageSource que delega la búsqueda del mensaje al padre si no lo encuentra en la instancia actual.

En su caso, probablemente sea mejor quedarse con la matriz de basenames . Tener la fuente del mensaje jerárquico podría tener más sentido si las fuentes del mensaje estuvieran usando diferentes implementaciones. Por ejemplo, el segundo que lee mensajes de db.

Tenga en cuenta que en este caso, cuando Spring encuentra dos instancias de MessageSource , la principal será la que tenga el 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>