グローバリゼーション・メカニズムを実装する前に、まず通常の 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
を使用可能にするには、次のようにします。
- バンドルをアプリケーション構成に登録します。 つまり、要素内のメッセージ・バンドルを
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>
- 次のステップでは、サポートされるロケール用に一連のプロパティー・ファイルを作成します。 上記の構成に基づいて、Eclipse™ 動的 Web プロジェクトの Java™
src
ディレクトリーの下にmessage.properties
ファイルを作成します。 このmessage.properties
ファイルは、要求されたロケールと一致するロケールがない場合にデフォルトのメッセージ・バンドルとして使用されます。 message.properties
ファイルと同じフォルダーの下にロケール固有のメッセージ・プロパティー・ファイルを追加します。 例えば、messages_en_US.properties
とmessages_zh_CN.properties
を Javasrc
ディレクトリーの下に置きます。 これらのファイルは、コンパイル後、ご使用のclasses
ディレクトリーにコピーされます。 プロジェクト階層が次の図に示されています。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 アプリケーション・グローバリゼーションの例を参照してください。