JViews JSF アプリケーションのグローバリゼーションおよび多文化サポート

グローバリゼーション・メカニズムを実装する前に、まず通常の JViews JavaServer™ Faces (JSF) アプリケーションを作成してください。 その後、以下のセクションで説明されているステップに従って、ご使用のアプリケーションをローカライズすることができます。

アクティブ・ロケールの決定

JSF グローバリゼーションはロケールに基づいており、JSF アプリケーションはローカライズされたリソースの検索時にアクティブ・ロケールを使用します。 アプリケーションがサポートするロケールを指示するには、faces-config.xml の要素内で、ご使用のアプリケーションのデフォルト・ロケールとサポートされているロケールを宣言します。
       <faces-config>
         <application>
                <locale-config>
                     <default-locale>en_US</default-locale>
                     <supported-locale>zh_CN</supported-locale>
                </locale-config>
           ...
         </application>
          ...
        </faces-config>
上記の例では、当該要素がブラウザーの言語設定に基づいて正しいロケールを見つけます。 Web アプリケーションのデフォルト・ロケールは en_US ですが、これは zh_CN もサポートします。
faces-config.xml では、<supported-locale> 要素は複数あることもありますが、<default-locale> 要素は 1 つのみが可能です。
デフォルトで推論されたロケールとは異なるロケール (例えば、企業ポリシーで指定されたロケール、現在のセクションとしてユーザーが明示的に選択したロケール、前のセッションのロケール、またはユーザーの登録プロファイルのロケール) の ULocale を通じて拡張多文化サービスを使用したい場合は、現在の要求の期間に IlvLocaleUtil.setThreadULocale(ULocale locale) を使用してロケールを指定する必要があります。 1 つのセッション内でロケールを変更する場合は、関連する JViews コンポーネントに対して IlvLocaleUtil.setThreadULocale(ULocale locale) を呼び出す必要があることもあります。
詳しくは、「アドバンスト・グローバリゼーション」を参照してください。

ロケール固有データの作成と登録

グローバル化された Web アプリケーションでは、ロケール固有のデータは、ユーザーの言語と地域に従って別個に提供されます。 通常、JSF アプリケーションは、ResourceBundle を使用して、ロケール固有のデータを分離します。このデータは一連のプロパティー・ファイルによってバックアップされます。
アプリケーションの起動時に ResourceBundle を使用可能にするには、次のようにします。
  1. バンドルをアプリケーション構成に登録します。 つまり、要素内のメッセージ・バンドルを faces-config.xml に登録します。
               <application>
                  <message-bundle>messages</message-bundle>
                   ...
               </application>
    
    この要素は一連の変換されたメッセージを表します。 この要素には、変換されたメッセージを含む ResourceBundle への完全修飾パスが含まれていなければなりません。
    faces-config.xml は現在次のようになっているはずです。
              <faces-config>
                <application>
                    <locale-config>
                         <default-locale>en_US</default-locale>
                         <supported-locale>zh_CN</supported-locale>
                    </locale-config>
                    <message-bundle>messages</message-bundle>
                </application>
                 ...
              </faces-config>
    
  2. 次のステップでは、サポートされるロケール用に一連のプロパティー・ファイルを作成します。 上記の構成に基づいて、Eclipse™ 動的 Web プロジェクトの Java™ src ディレクトリーの下に message.properties ファイルを作成します。 この message.properties ファイルは、要求されたロケールと一致するロケールがない場合にデフォルトのメッセージ・バンドルとして使用されます。
  3. message.properties ファイルと同じフォルダーの下にロケール固有のメッセージ・プロパティー・ファイルを追加します。 例えば、messages_en_US.propertiesmessages_zh_CN.properties を Java src ディレクトリーの下に置きます。 これらのファイルは、コンパイル後、ご使用の classes ディレクトリーにコピーされます。 プロジェクト階層が次の図に示されています。
    サブフォルダー WebContent>WEB- INF 内の強調表示されたファイル faces-config.xml およびフォルダー WebContent と平行して存在する src という別のフォルダーにある以前に参照されたメッセージ・ファイルを示す JSF のプロジェクト・ファイル構造。
  4. key=value 形式によってメッセージ・プロパティーを編成します。 例えば、messages.properties ファイルでは、次のようになります。
                zoomInteractorLink=Adding a zoom interactor
                overviewLink=Adding an overview
                ...
    
    メッセージ値が Unicode 文字 (例えば、messages_zh_CN.properties に入っている漢字) で表されている場合は、JDK で提供されるツール native2ascii を使用してファイルの内容をエスケープ・フォーマットに変換する必要があります。 このツールは、ご使用のネイティブ・エンコードで書かれたファイルを、非 ASCII 文字を Unicode エスケープ・シーケンスとして表すファイルに変換します。 このツールの詳細な使用法は、「here for Java 5」または「here for Java 6」に説明されています。
    次の簡単な例は、Windows プラットフォームでファイルをエンコード GBK (漢字用) から変換する方法を示しています。
              native2ascii -encoding GBK messages_zh.properties > messages_zh_escaped.properties
              

ロケール固有データの検索

通常の Web アプリケーションでは、ローカライズされたデータが必要な場所が 2 つあります。
  • クライアント側: 変換されたラベル、ボタン・テキスト、ツールチップ、およびその他の表示項目。
  • サーバー側: エラーまたは情報メッセージの表示。
ロケール固有のデータをクライアント側から取得する場合とサーバー側から取得する場合とでは、使用する方法が異なります。
  • JavaServer™ Pages (JSP) ページでロケール固有のデータを取得するには、次のようにします。
    JSP ページに UTF-8 サポートを追加します。
    • 次のコードを JSP ページの始めに追加します。
                    <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
                  
    • 次のコードを JSP ページのヘッダー・セクションに追加します。
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                  
  • ResourceBundle を Web ページにロードします。 便宜上、JSF は、ResourceBundle をマップにロードするタグを備えています。このタグは要求されたスコープに保管されます。 次に例を示します。
                   <f:loadBundle basename="messages" var="msg" />
       
    次に、#{msg.key} を使用して、プロパティー・ファイルから対応する値を取得することができます。 ResourceBundle が、これらのタグで指定するロケールのキーと一緒にメッセージを実際に含んでいるかどうか、確認してください。 ページ階層は現在次のようになっているはずです。
               <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
               <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
               <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
                <f:view>
                 <f:loadBundle basename="messages" var="msg" />
                  <html>
                     <head>
                      <title><h:outputText value="#{msg.title}" /></title>
                      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                        ...
                     </head>
                     <body>
                         ...
                      </body>
                  </html>
                </f:view>
    
  • サーバー側でロケール固有のデータを検索するには、次のようにします。
    サーバー側では、ResourceBundle を検索するメカニズムとともに Java 2 Platform が既に提供されています。 ここで資料「 The Java EE 5 Tutorial」を参照することができます。 『第 15 章 Web アプリケーションの国際化とローカライズ (Internationalizing and Localizing web Applications)』のセクション「リソース・バンドルの設定 (Setting the Resource Bundle)」を参照してください。このセクションには、バンドルを取得する 2 つの方法 (java.util.ResourceBundle.getBundle() API を使用する方法とアプリケーション構成ファイルの構成要素を使用する方法) が紹介されています。
    JViews ライブラリーは、ResourceBundle を処理する別の便利な方法を提供します。この方法では、ユーザーはリソース・バンドルのパスをハードコーディングする必要がありません。また、この方法は、必要に応じてさまざまなロケールを取得する便利な方法でもあります。 詳しくは、「JViews Web アプリケーションでの ResourceBundle の取得」を参照してください。
  • ロケール固有のダイアグラム、チャート、または地図を処理するには、次のようにします。
    テキスト・ストリングを含む JViews ダイアグラム、チャート、または地図は、単一のロケールのみに適しています。 同時に異なるロケールの異なるユーザーに対して同じダイアグラム、チャート、または地図表示のストリングを作成することはできません。 同時に異なるロケールの異なるユーザーに対して同じダイアグラム、チャート、または地図を提供したい場合は、そのダイアグラム、チャート、または地図のインスタンスを複数使用する必要があります。 セッションごとに 1 つのインスタンス、ユーザーごとに 1 つのインスタンス、または同じロケールを持つすべてのユーザーに対して 1 つのインスタンスが必要です。 このインスタンスを作成するときは、特定のロケールの ResourceBundle から、ローカライズされたストリング値を取り出す必要があります。

ブラウザーの言語オプションでの優先ロケールの指定

ブラウザーの指定された言語は faces-config.xml でサポートされている言語でなければならないので、注意してください。 ロケール固有のメッセージ・プロパティー・ファイルと一致するものがない場合は、デフォルトの messages.properties が使用されます。

参照された例

詳しくは、 <installdir> /jviews-framework89/samples/jsf-framework-demo/index.html にある参照された JSF Web アプリケーション・グローバリゼーションの例を参照してください。