2

Locale.getDefault() がenを返すときに、春の「ReloadableResourceBundleMessageSource」がコードに関連付けられた適切なメッセージを見つけることができないのはなぜですか? en_USを返すときに適切なメッセージを見つけることができます。

デフォルトのロケール: en_US

key: CODE_1, Locale: Locale.US           = Hit
key: CODE_1, Locale: Locale.CANADA       = Hit
key: CODE_1, Locale: fr_CA               = Hit
key: CODE_1, Locale: null (use default)  = Hit

デフォルトのロケール: en

key: CODE_1, Locale: Locale.US               = Hit
key: CODE_1, Locale: Locale.CANADA           = CODE_1
key: CODE_1, Locale: fr_CA                   = CODE_1
key: CODE_1, Locale: null (use default)      = CODE_1

message_en_US.propertiesであるクラスパスに CODE_1 を持つバンドルが 1 つだけあります。

4

2 に答える 2

5

メッセージはファイルen_USで定義されているため、ロケールに対してのみ定義されmessage_en_US.propertiesます。en_USロケール(Locale.US)からに切り替えるときに異なる動作が発生する理由 enは、要求されたロケールでメッセージが見つからない場合、 ReloadableResourceBundleMessageSourceがデフォルトでシステムロケールにフォールバックするためです。

最初のケースでen_USは、がデフォルトの場合、メッセージは常に検出されます。これは、要求されたローカルがであるen_USかどうかにかかわらず、メッセージソースはへのフォールバックを実行しen_USます。ここでメッセージが定義されます。

デフォルトのロケールが、の場合、正しいプロパティファイルを検索しているためen、クエリのみが機能します。en_US他のすべての場合、メッセージは対応するプロパティファイルに見つかりません。また、フォールバックロケールにもありませんen

于 2010-07-28T16:47:30.223 に答える
2

これは、国/言語固有のプロパティ ファイルmessages_en.propertiesmessages.properties.

国に関係なくすべての言語のデフォルトバンドルが必要な場合は、 . すべての言語のデフォルトバンドルが必要な場合は、 .enmessages_en.propertiesmessages.properties

実際には、やのmessages_en_US.propertiesような英語の方言が複数ある場合にのみ役立ちますが、他の英語の「方言」には別の方言も提供する必要があります。それらの 1 つに名前を付ける必要があります。これは、国を指定していない訪問者の「デフォルト」の英語のバンドルとして使用できます。en_UKen_USmessages_en.properties

于 2010-07-27T17:33:11.997 に答える