Comment extérioriser un paquet de MessageSources de printemps en dehors de la guerre
-
21-09-2019 - |
Question
Je dois extérioriser le faisceau de MessageSources de printemps pour le support i18n (fichiers de propriétés) en dehors du classpath afin de modifier les propriétés plus facilement. Comment puis-je faire?
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="test-messages"/>
Merci!
La solution
Nous avons construit une implémentation source de message qui recherche des messages dans le DB. Ce que vous devez faire est de créer une implémentation MessageSource qui hérite de AbstractMessageSource de printemps (afin d'obtenir toutes les fonctionnalités, voir javadoc).
Vous devez mettre en œuvre au minimum la méthode abstraite « resolveCode (String, Locale) » (mais la mise en œuvre « resolveCodeWithoutArguments (String, Locale) » augmentera vos performances), qui délègue à un pointage de DAO à cette table simple, avec définition telle que celle-ci:
table translation (
translation_id number pk
code varchar(20)
locale varchar(5)
translation varchar(100)
)
code et locale forment un index unique.
Et vous avez terminé. Bien sûr, vous allez ajouter des fonctionnalités de cache, et fournir un comportement « de la dégradation locale » (à savoir si « en_US » est introuvable, essayez « en »), que ce soit au niveau MessageSource ou Dao.
Cela fonctionne parfaitement.
Autres conseils