JViews Web アプリケーションの多文化サポートに関する便利なヒントを以下に示します。
JSF のロケール判定プロセス
JavaServer™ Faces (JSF) のロケール判定プロセスに関するヒントを以下に示します。
- JSF 要求が着信すると、ロケール判定プロセスは最初に、HTTP ヘッダーの
"Accept-Language"
属性 (ブラウザーの言語オプションで設定される) のロケール、およびfaces-config.xml
内の要素で構成されたサポートされるロケールの中から、要求されたロケールに一致するものを検索します。 - ブラウザーで言語オプションが設定されていない場合、このプロセスは、
faces-config.xml
内の要素で構成されたデフォルト・ロケールを使用します。 - ロケールが一致しない場合、このプロセスは、デフォルト・ロケールを使用しようとします。
- 上のロケールのどれも見つからない場合、このプロセスは、サーバー・サイドの JVM のデフォルト・ロケールを使用します。ロケールが特定されると、JViews Web アプリケーションは、現在のスレッド・コンテキストにそれを保管し、現在のスレッドの今後のタスクでそれを直接使用します。要求が完了すると、保管されているロケールはクリーンアップされます。
JSF ロケール識別の優先順位
JSF のユーザーは、サポートされるロケールを以下の 2 とおりの方法で宣言できます。
f:view tag
(<f:view locale="en_US">
など) 内のロケール属性を設定することでロケールを指定する。faces-config.xml
の要素内に、サポートされるロケールを指定する。<application> <locale-config> <default-locale>en_US</default-locale> <supported-locale>en_US</supported-locale> </locale-config> ... </application>
どちらの方法も機能しますが、併用した場合、ロケールの判定では、
<f:view locale="...">
が優先します。JViews Web アプリケーションでの ResourceBundle
の取得
JViews ライブラリーには、
ResourceBundle
を便利な方法で操作するためのユーティリティーがいくつか用意されています。そのためには、以下の手順に従います。
messages.properties
ファイルを作成し、このファイルを Java™ クラスと同じフォルダーに格納します。messages.properties
ファイル内でClassName.key=value
形式を使用してメッセージ・プロパティーを編成します。次に例を示します。FrameworkBean.CustomImapGeneratorOn=Custom imap generator called on {0} FrameworkBean.onImageMap=on image map ...
messages.properties
ファイルは、クラスFrameworkBean
と同じパッケージに入れる必要があることに注意してください。ResourceBundle
をロードします。便利なように、JViews ライブラリーには、ResourceBundle
を操作するためのクラス IlvResourceUtil が用意されています。これにより、ユーザーは、リソース・バンドル・パスをハードコーディングする必要がなく、必要に応じて各種ロケールを簡単に取得することもできます。適用するロケールを決定するためのルールをいくつか以下に示します。- ローカライズされたデータをブラウザーに表示する必要がある場合は (情報メッセージなど)、API
ilog.views.util.IlvResourceUtil.getCurrentLocaleString(Class clazz, String subkey)
を使用して、メッセージ・プロパティー値を取得します。次に例を示します。ilog.views.util.IlvResourceUtil.getCurrentLocaleString(FrameworkBean.class, "onImageMap");
これは、現在の JSF コンテキストから正しいロケールを検索し、キーからローカライズされたメッセージ値を返します。 - ローカライズされたデータをサーバー・コンソールにのみ表示する必要がある場合は (ログ・メッセージなど)、API
ilog.views.util.IlvResourceUtil.getServerLocaleString(Class clazz, String subkey)
を使用して、メッセージ・プロパティー値を取得します。次に例を示します。ilog.views.util.IlvResourceUtil.getServerLocaleString(FrameworkBean.class, "CustomImapGeneratorOn")
これは、JVM のデフォルト・ロケールを検索し、キーから翻訳されたメッセージ値を返します。
ブラウザーの言語設定を変更する方法
各種ブラウザーの言語オプションの設定方法については、http://www.w3.org/International/questions/qa-lang-priorities の文書を参照してください。