2

Notre application Web utilise Spring 2.5. Il se compose de plusieurs modules, chacun pouvant apporter des fichiers de contexte Spring supplémentaires, qui sont chargés automatiquement (dans un contexte d'application). Nous voulons laisser chaque module fournir des groupes de ressources supplémentaires (pour le support I18N). Spring prend en charge l'internationalisation en enregistrant un bean avec le nom messageSource dans le fichier de configuration, mais cela suppose que je sache exactement quel est le nom complet du fichier de classe ou de propriétés qui contenait les chaînes traduites. Ceci est un problème car d'autres modules peuvent avoir leurs propres fichiers de propriétés placés dans un emplacement différent. Je cherche donc un moyen de laisser chaque module définir son propre messageSource avec ses propres bundles de ressources et je ne sais pas comment le faire.Plusieurs sources de message dans les fichiers de configuration Spring

Est-ce que quelqu'un connaît la solution à ce problème?

Merci.

Répondre

0

J'ai utilisé les sources de messages à Spring pour un support i18n. Dans mon cas, j'en n'avais besoin que d'un, il était donc facile d'injecter la source de message dont j'avais besoin dans le bean service que je créais. J'espérais voir quelque chose comme ce que je proposerai plus tard dans les sources de Spring elle-même. Mais je ne vois rien qui puisse agréger des sources de messages hétérogènes. Si tous ces éléments font partie d'un ensemble de ressources comme les fichiers de propriétés, je suis sûr que vous pourriez écrire un wrapper pour ResourceBundleMessageSource qui pourrait être mis à jour dynamiquement lorsque les beans ont été enregistrés. Cependant, si vous vouliez agréger des sources Message hétérogènes, c'est ce que je suggérerais. Créez un bean d'agrégation source de message qui lors du chargement demande à ApplicationContext des beans de type MessageSource.class. Ce bean d'agrégation peut alors laisser chaque source tenter de résoudre la clé et formater le message. En fonction du nombre de fichiers/classes de sources msg que vous avez, vous pouvez autoriser l'implémentation d'agrégation à prioriser ceux qu'elle tente d'utiliser en premier. Si la performance devient un problème, vous pouvez également mettre en cache quelle source a résolu quelles clés de sorte que l'agrégateur n'ait pas à deviner à chaque fois.