多文化サポート JViews Web アプリケーションのヒント

JViews Web アプリケーションの多文化サポートに関する便利なヒントを以下に示します。

JSF のロケール判定プロセス

JavaServer™ Faces (JSF) のロケール判定プロセスに関するヒントを以下に示します。
  • JSF 要求が着信すると、ロケール判定プロセスは最初に、HTTP ヘッダーの "Accept-Language" 属性 (ブラウザーの言語オプションで設定される) のロケール、および faces-config.xml 内の要素で構成されたサポートされるロケールの中から、要求されたロケールに一致するものを検索します。
  • ブラウザーで言語オプションが設定されていない場合、このプロセスは、faces-config.xml 内の要素で構成されたデフォルト・ロケールを使用します。
  • ロケールが一致しない場合、このプロセスは、デフォルト・ロケールを使用しようとします。
  • 上のロケールのどれも見つからない場合、このプロセスは、サーバー・サイドの JVM のデフォルト・ロケールを使用します。ロケールが特定されると、JViews Web アプリケーションは、現在のスレッド・コンテキストにそれを保管し、現在のスレッドの今後のタスクでそれを直接使用します。要求が完了すると、保管されているロケールはクリーンアップされます。

JSF ロケール識別の優先順位

JSF のユーザーは、サポートされるロケールを以下の 2 とおりの方法で宣言できます。
  1. f:view tag (<f:view locale="en_US"> など) 内のロケール属性を設定することでロケールを指定する。
  2. 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 の文書を参照してください。