2012-01-26 7 views
2

私のアプリケーションでは、2つのロケール(ENとIT)から選択できます。ブラウザが別の言語を使用している場合は、英語を自動的に選択する必要があります。Struts(1)のデフォルトロケールが選択されていません

しかし、たとえば、ユーザーがフランス語のブラウザを使用している場合、フランス語を検索しようとしますが、フランス語のロケールはなく、ページにコンテンツが表示されません。

したがって、問題は次のとおりです。デフォルトのロケールを選択するためにどのライブラリまたはプロセスが応答していますか?おそらく私の図書館は時代遅れですか?

答えて

0

ブラウザで別の言語が使用されている場合は、自動的に英語を選択する必要があります。

Strutsは、最も具体的なメッセージバンドルを見つけようとします(デフォルトのJVMロケールや言語の接尾辞を持たないメッセージバンドルなど)。 Normally it's something like this

base + "_" + localeLanguage + "_" + localeCountry + "_" + localeVariant 
base + "_" + localeLanguage + "_" + localeCountry 
base + "_" + localeLanguage 
base + "_" + default locale 
base 

...そこにはフランスのロケールではなく、彼は、ページには何のコンテンツを表示しません。

これは正しくないと思われます。メッセージキーを解決できない場合、"ロケール" ... "のバンド" ... "のキーメッセージが見つかりません"またはのような結果が得られますか? " ?fr.yourKey ??? "にstruts-config.xmlの<message-resources ... null="false" />のような設定があるので、ページ上に、または少なくともログに何かが表示されるはずです。

私の提案は、org.apache.struts.util.PropertyMessageResourcesのログを有効にして、何を見つけるかを確認することです。また、.propertiesファイルをチェックしてください。キーがデフォルトファイルで解決され、空である可能性があります。 (PropertyMessageResourcesは、その動作モードでやっている離れてから)現在の要求で使用するロケールを選択したプロセスについては

は、いくつかの点で Strutsのリクエストプロセッサは返却する責任があるorg.apache.struts.chain.commands.servlet.SelectLocaleへの呼び出しを行いますロケール。

このクラスは、セッション内でキャッシュされたロケールを検索しようとします。そこに見つけられない場合は、リクエストに含まれているものを使います。そこに見つからない場合は、最終的にJVMロケールがデフォルトになります。ロケールが選択され、セッションでキャッシュされるようになりました。

これはStrutsクラスなので、struts-core JARで見つけることができます。使用している特定のバージョンのStrutsソースコードにアクセスできる場合は、ロケールの管理方法を自分で調べることができます。 Globals.LOCALE_KEYを使用しているコードは、あなたが後になるものです。

+0

私の質問は違っていましたが、私がすでに知っていることを説明します:) –

+0

@Comodore Panamo:私はいくつかの詳細で答えを更新しました。あなたが探している答えの種類を教えてくれない場合は、それが役立つかどうかを見てください。 – Bogdan

関連する問題