ユーザーが優先するローカルに関する情報をリクエストから収集する理由について、さらに何かを言う必要がありますが、ヘッダーから取得するとしましょうaccept-language
次に、JSF仕様が言うように:
UIViewRoot の Locale は、ViewHandler の createView() メソッドの実行中に ViewHandler によって決定および設定されます。このメソッドは、ユーザーのプリファレンスとアプリケーションのサポートされているロケールを組み合わせて調べることによって、アクティブなロケールを決定する必要があります。
したがって、1 つは ViewRoot で Locale を設定し、リクエスト ヘッダーから Locale を収集することです。もう 1 つは、構成ファイルでサポートされているロケールを適切に設定することです。
仕様の他の部分で読むことができます(ViewHandler calculateLocale
方法を参照):
メソッド Application.getSupportedLocales() は、この JSF アプリケーションがサポートできるロケールを定義します。このメソッドは、そのようなデータ ソースを照合し、現在のアプリケーションを現在のユーザーにレンダリングするための最良の選択である Locale オブジェクトを返す必要があります。
なぜそのような流れになっているのでしょうか。アプリがそのロケールで応答を送信することがサポートされていない場合、ユーザーが優先するロケールでユーザーに応答を送信できないためです。faces-config.xml
あとは、次のようにinディレクトリを構成するだけです (WEB-INF
これも JSF 仕様からコピーされます)。
<faces-config>
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>de</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>es</supported-locale>
// ...
</locale-config>
</application>
</faces-config>