2016-06-16 4 views
2

は現在、私は私のfaces-config.xml、このようなセクションがあります。JSF 2.2:次のように設定可能なロケール外に面している-config.xmlの

問題は、戦争中にfaces-config.xmlに触れることなくこれらのロケールを定義できることです。アイデアは例えば使用可能なすべてのロケールを定義するリソースパス上のconfigファイル。

すでにprogramatic approachを試しました。また、私がアクセスできる別のモジュールのMETA-INFの2番目のfaces-config.xmlを使用して、articleに従ってマージする必要のあるressourceパス上の特定のファイルを定義しました。 2番目のファイルには、上記のセクションが有効なfaces-config.xml形式で含まれていました。どちらも効果なし(エラーも動作の変化もありません)

オリジナルのfaces-configに触れることなくこれを行うには良い方法がありますか?

私は耳のモジュールを変更して、どこからでもプログラム可能なリソースにアクセスすることができます。残念ながら、.warのfaces-config.xmlを調整することはできません。

+0

@Kukeltje:残念ながら答えは私を助けません。しかし、実際問題は非常に似ているようです。私はすでに自分のロジックですべてのリソースを解決しています。私は、ブラウザで受け入れられた言語の処理をmyfacesの実装に任せたいと考えていました。 – Abaddon666

+0

問題は、ブラウザの言語と自分の設定を使用するかどうかを選択することです。したがって、ブラウザが送信したロケールは何らかの形で処理する必要があります。残念ながら、Facesを使ってこれを行う唯一の方法は、locale-configを定義することです。それ以外の場合は、自分でリクエストからそれらを抽出する必要があります。 – Abaddon666

答えて

1

私が見る限り、ここに誤解があります。カスタムリゾルバ/リソースバンドルを使用している場合は、locale-configに何も設定する必要はありません。

あなたはAdd Resource Bundles Programmaticallyに答えを見れば、あなたはOmniFaces Faces.getLocale()を参照してくださいがResourceBundleの

Locale userLocale = Faces.getLocale(); 
ResourceBundle b = ResourceBundle.getBundle("msgs", userLocale); 

にロケールを渡すために使用されているので、どのような効果的に行われることはありません自動的に、それをプログラムで選択したロケールを渡していますlocale-configに設定されているものを使用してください。

locale-configを使用するためにいくつかのコードが存在するという事実は、人々がlocale-configで何か設定されている場合に使用できることを確認するため、通常のJSFでは期待どおりに動作します。 16行目では、ユーザからのリクエストでロケール送信を取得します。 18行目では、(カスタム実装で除外することができる!!!)supported-localeに対してこれをチェックし、不一致ならば、default-locale(7-12行ができるように除外することができる)

1 /** 
2  * {@inheritDoc} 
3  * @see Faces#getLocale() 
4  */ 
5 public static Locale getLocale(FacesContext context) { 
6  Locale locale = null; 
7  UIViewRoot viewRoot = context.getViewRoot(); 
8 
9  // Prefer the locale set in the view. 
10  if (viewRoot != null) { 
11   locale = viewRoot.getLocale(); 
12  } 
13 
14  // Then the client preferred locale. 
15  if (locale == null) { 
16   Locale clientLocale = context.getExternalContext().getRequestLocale(); 
17 
18   if (getSupportedLocales(context).contains(clientLocale)) { 
19    locale = clientLocale; 
20   } 
21  } 
22 
23  // Then the JSF default locale. 
24  if (locale == null) { 
25   locale = context.getApplication().getDefaultLocale(); 
26  } 
27 
28  // Finally the system default locale. 
29  if (locale == null) { 
30   locale = Locale.getDefault(); 
31  } 
32 
33  return locale; 
34 } 
を使用します

このコードは、ユーザがあなたのアプリケーションで設定のロケールを設定したかどうかを最初にチェックしたり、そうでなければブラウザでサポートされているロケールを使用したりするなど、好みに合わせて完全に調整できます。

+0

説明のためにありがとう、私は、プログラム設定で、Facesを完全にバイパスし、ユーザーの設定に基づいてロケールを設定し、あなたの例に似たリクエストを行います。 – Abaddon666

+0

私は面はブラウザの言語を処理しますが、短期間の評価の後では自分自身を決める方が簡単だと分かります – Abaddon666

+0

あなたは歓迎です。あなたのために「顔/顔」とは何ですか? omn​​ifaces utilクラスか他に何か? – Kukeltje

関連する問題