私が見る限り、ここに誤解があります。カスタムリゾルバ/リソースバンドルを使用している場合は、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 }
を使用します
このコードは、ユーザがあなたのアプリケーションで設定のロケールを設定したかどうかを最初にチェックしたり、そうでなければブラウザでサポートされているロケールを使用したりするなど、好みに合わせて完全に調整できます。
@Kukeltje:残念ながら答えは私を助けません。しかし、実際問題は非常に似ているようです。私はすでに自分のロジックですべてのリソースを解決しています。私は、ブラウザで受け入れられた言語の処理をmyfacesの実装に任せたいと考えていました。 – Abaddon666
問題は、ブラウザの言語と自分の設定を使用するかどうかを選択することです。したがって、ブラウザが送信したロケールは何らかの形で処理する必要があります。残念ながら、Facesを使ってこれを行う唯一の方法は、locale-configを定義することです。それ以外の場合は、自分でリクエストからそれらを抽出する必要があります。 – Abaddon666