3

私たちの Web アプリケーションは Spring 2.5 を使用しています。複数のモジュールで構成され、各モジュールは追加の Spring コンテキスト ファイルを持ち込むことができ、自動的に (1 つのアプリケーション コンテキストに) ロードされます。各モジュールが追加のリソース バンドルを提供できるようにしたいと考えています (I18N サポート用)。

Spring は、構成ファイルに messageSource という名前の Bean を登録することで国際化をサポートしますが、これは、変換文字列を含むクラスまたはプロパティ ファイルの完全修飾名が何であるかを正確に知っていることを前提としています。他のモジュールには独自のプロパティ ファイルが別の場所に配置されている可能性があるため、これは問題です。したがって、各モジュールが独自のリソースバンドルを使用して独自の messageSource を定義できるようにする方法を探していますが、その方法がわかりません。

この問題の解決策を知っている人はいますか?

ありがとう。

4

1 に答える 1

0

いくつかの i18n サポートのために、Spring のメッセージ ソースを使用しました。私の場合、必要なものは 1 つだけだったので、作成中のサービス Bean に必要な 1 つのメッセージ ソースを簡単に挿入できました。

Spring のソース自体で、後で提案するようなものを見たいと思っていました。しかし、異種のメッセージ ソースを集約するものは見当たりません。それらすべてがプロパティ ファイルのようなリソース バンドルの一部になる場合、Bean が登録されたときに動的に更新できる ResourceBundleMessageSource のラッパーを作成できると確信しています。

ただし、異種の MessageSource を集約したい場合は、これをお勧めします。ロード時に ApplicationContext に MessageSource.class タイプの Bean を要求するメッセージ ソース集約 Bean を作成します。この集約 Bean により、各ソースはキーの解決とメッセージのフォーマットを試行できます。持っているファイル/メッセージ ソース クラスの数に応じて、集約実装が最初に使用しようとするものに優先順位を付けることができるようにすることができます。パフォーマンスが問題になる場合は、アグリゲーターが毎回推測する必要がないように、どのソースがどのキーを解決したかをキャッシュすることもできます。

于 2010-02-02T15:33:34.463 に答える