Oracle® Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド 11gリリース1(11.1.1.9.0) B52029-12 |
|
![]() 前 |
![]() 次 |
この章では、ユーザーのブラウザの適切な言語でテキストが表示されるように、JSFページまたはアプリケーションを構成する方法を説明します。
この章では、次の項目について説明します。
国際化は、特定地域の言語と文化に適応しやすくするための、製品の設計および開発のプロセスです。ローカライゼーションは、テキストを変換し、ロケール固有のコンポーネントを追加することで、特定地域の言語または文化に製品を適応させるプロセスです。上手くローカライズされたアプリケーションは、その地域で開発されたように見えます。JDeveloperは、抽象クラスjava.util.ResourceBundle
を使用してロケール固有のリソースを提供し、ADF Facesコンポーネントをローカライズしやすいようにサポートします。
複数の国のユーザーがアプリケーションを表示する場合、ユーザーのブラウザの言語設定に対応する適切な言語が表示されるよう、様々なロケールを使用できるようにJSFページまたはアプリケーションを構成できます。たとえば、ページがイタリアで表示されるとわかっている場合、ユーザーのブラウザがイタリア語を使用するように設定されているときにはブラウザ・ページ内のテキスト文字列がイタリア語で表示されるように、ページをローカライズできます。
ADF Facesコンポーネントは、コンポーネントの一部であるテキストを含むことがあります。たとえば、データの初期ロード中にテーブルがデータをフェッチしているとき、またはテーブルがスクロールされているときに、af:table
コンポーネントでは、ブラウザで表示されるメッセージ・テキストにリソース文字列af_table.LABEL_FETCHING
が使用されます。JDeveloperでは、これらのテキスト・リソースを28言語に自動的に変換します。これらのテキスト・リソースは、リソース・バンドルで参照されます。ユーザーがイタリア語を使用するようにブラウザを設定した場合、コンポーネント内に含まれるテキストはすべて自動的にイタリア語で表示されます。スキンおよびリソース・バンドルの使用の詳細は、第20章「スタイルおよびスキンを使用した外観のカスタマイズ」を参照してください。
text
属性を設定してaf:commandButton
コンポーネントのラベルを定義する場合など、コンポーネントに追加するテキストには、実際のテキストが含まれているリソース・バンドルを指定して、各ロケール版のリソース・バンドルを作成し、<locale-config>
要素を追加して、アプリケーションのfaces-config.xml
ファイルにデフォルトおよびサポートされるロケールを定義する必要があります。また、アプリケーションのすべてのページでリソース・バンドルを使用できるようにするには、アプリケーションのfaces-config.xml
ファイルに<resource-bundle>
要素を追加する必要があります。リソース・バンドルを構成および登録すると、式言語(EL)エディタによりバンドルのキーが表示され、アプリケーション・ページでのバンドルの参照が簡単になります。
ADFコンポーネントに追加するテキストのテキスト・リソースを作成するプロセスを簡略化するために、JDeveloperでは、ビジュアル・エディタの変換可能な文字列に関する、リソース・バンドルの自動同期がサポートされています。ビジュアル・エディタまたはプロパティ・インスペクタで直接コンポーネントを編集すると、ベース・リソース・バンドルにテキスト・リソースが自動的に作成されます。
注意: データベースから取得されたテキストは変換されません。このドキュメントでは、静的テキストのローカライズ方法については説明しますが、データベース内に格納されているテキストのローカライズ方法については説明しません。 |
たとえば、このページのタイトルが「My Purchase Requests」の場合、af:panelPage
コンポーネントのtitle
属性の値として「My Purchase Requests」を指定するのではなく、この値をUIResources
リソース・バンドル内のキーにバインドしています。例21-1
に示すように、UIResources
リソース・バンドルは、アプリケーションのfaces-config.xmlファイルに登録されます。
例21-1 JSF構成ファイルのリソース・バンドル要素
<resource-bundle> <var>res</var> <base-name>resources.UIResources</base-name> </resource-bundle>
リソース・バンドルには、EL式に使用可能な変数名(この場合はres
)が提供されます。例21-2
に示すように、ページでは、af:panelPage
コンポーネントのtitle属性が、そのリソース・バンドル内のmyDemo.pageTitleキーにバインドされます。
UIResources
リソース・バンドル内には、アプリケーションの各ページに表示されるすべての静的テキスト、メッセージのテキスト、グローバル・テキスト(汎用ラベルなど)に対する英語のエントリがあります。例21-3に、myDemoページのキーを示します。
例21-3 英語で表示されるmyDemoページのリソース・バンドル・キー
#myDemo Screen
myDemo.pageTitle=My Purchase Requests
myDemo.menubar.openLink=Open Requests
myDemo.menubar.pendingLink=Requests Awaiting customer
myDemo.menubar.closedLink=Closed Requests
myDemo.menubar.allRequests=All Requests
myDemo.menubar.newLink=Create New Purchase Request
myDemo.selectAnd=Select and
myDemo.buttonbar.view=View
myDemo.buttonbar.edit=Edit
バナー・イメージのテキストおよびデータベースから取得されたデータは変換されないことに注意してください。
例21-4に、イタリア語ロケール・バージョンのリソース・バンドル(UIResources_it
)を示します。選択ファセットのタイトルに対するエントリがないのに、「Select」が自動的に「Seleziona」に変換されていることに注意してください。これは、このテキストがADF Faces表コンポーネントの選択ファセットの一部になっているためです。
例21-4 イタリア語で表示されるmyDemoページのリソース・バンドル・キー
#myDemo Screen myDemo.pageTitle=Miei Ticket myDemo.menubar.openLink=Ticket Aperti myDemo.menubar.pendingLink=Ticket in Attesa del Cliente myDemo.menubar.closedLink=Ticket Risolti myDemo.menubar.allRequests=Tutti i Ticket myDemo.menubar.newLink=Creare Nuovo Ticket myDemo.selectAnd=Seleziona e myDemo.buttonbar.view=Vedere Dettagli myDemo.buttonbar.edit=Aggiorna
ビジュアル・エディタでADF Facesコンポーネントを編集する際、JDeveloperでは、デフォルトのリソース・バンドルへのテキスト・リソースの自動作成がデフォルトでサポートされています。ユーザー定義の文字列を静的な値として処理するには、21.2.1項「リソース・バンドル・オプションの設定方法」で説明されているように、「プロジェクト・プロパティ」ダイアログで「バンドルの自動同期化」を無効にします。
自動リソース・バンドル統合は、ページまたはプロジェクトごとに1つのリソース・バンドル、または複数の共有バンドルをサポートするように構成できます。
次のいずれかの方法で変換可能なテキスト文字列を編集できます。
ビジュアル・エディタで、コンポーネントに直接新しいテキストを入力します。図21-1に示すように、コンポーネントをクリックして、テキスト入力ウィンドウを表示します。
図21-2に示すように、テキスト入力ウィンドウで「テキスト・リソースの選択」を選択し、「テキスト・リソースの選択」ダイアログを起動します。このダイアログには、コンポーネントを右クリックして「テキスト・リソースの選択」を選択するか、プロパティ・インスペクタで変換可能プロパティの右にあるアイコンをクリックして「テキスト・リソースの選択」を選択することでも起動できます。
テキスト入力ウィンドウで、「式ビルダー」を選択して「式ビルダー」ダイアログを起動します。このダイアログは、プロパティ・インスペクタで、変換可能なプロパティの右にあるアイコンをクリックして「式ビルダー」を選択することでも起動できます。
プロパティ・インスペクタで、変換可能なプロパティに有効な式言語文字列を入力します。
注意: JDeveloperでは、前述の方法のいずれかを使用して入力する文字列をリソース・バンドルに記述するのみです。 |
プロジェクトを作成したら、「プロジェクト・プロパティ」ダイアログにリソース・バンドル・オプションを設定できます。
プロジェクトにリソース・バンドル・オプションを設定する方法:
アプリケーション・ナビゲータで、プロジェクトをダブルクリックします。
図21-3に示すように、「プロジェクト・プロパティ」ダイアログで、「リソース・バンドル」を選択してリソース・バンドル・オプションを表示します。
JDeveloperにより自動的にデフォルトのリソース・ファイルが生成されるようにする場合は、「バンドルの自動同期化」を選択します。
次に示すいずれかのリソース・バンドル・ファイル・オプションを選択します。
1プロジェクト当たり1バンドル - <ProjectName>.properties
という名前のファイルに構成されます。
1ページ当たり1バンドル - <PageName>.properties
という名前のファイルに構成されます。
複数の共有バンドル。
ドロップダウン・リストからリソース・バンドル・タイプを選択します。
XML Localization Interchange File Format (XLIFF)バンドル
リスト・リソース・バンドル
プロパティ・バンドル
「OK」をクリックします。
JDeveloperでは、図21-3に示すように、「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで行った選択に基づいて、特定のタイプの1つ以上のリソース・バンドルが生成されます。図21-2に示されている「テキスト・リソースの選択」ダイアログを最初に開いたときに、リソース・バンドルが生成されます。
たとえば、「1プロジェクト当たり1バンドル」チェック・ボックスを選択し、「リソース・バンドル・タイプ」
ドロップダウン・リストから「リスト・リソース・バンドル」値を選択するとします。初めて「テキスト・リソースの選択」ダイアログを呼び出すと、JDeveloperではそのプロジェクト用に1つのリソース・バンドルが生成されます。生成されたリソース・バンドルは、「プロジェクト・プロパティ」ダイアログのデフォルトのプロジェクト・バンドル名をとったJavaクラスです(ViewControllerBundle.java
など)。
JDeveloperでは、「XMLローカライズ交換ファイル形式(XLIFF)バンドル」
オプションを選択した場合は.xlfファイルとしてリソース・バンドルが、「プロパティ・バンドル」
オプションを選択した場合は.propertiesファイルが生成されます。
デフォルトでは、JDeveloperにより、プロジェクトの「アプリケーション・ソース」ディレクトリの「view」サブディレクトリに、生成されたリソース・バンドルが作成されます。
JDeveloperでは、「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで選択した値に基づいて、1つ以上のリソース・バンドルが生成されます。プロパティ・インスペクタのコンポーネント・プロパティから「テキスト・リソースの選択」ダイアログを初めて呼び出したときに、リソース・バンドルが生成されます。
JDeveloperでは、「テキスト・リソースの選択」ダイアログで入力した値に基づいて、リソース・バンドルにキー値のペアが記述されます。また、リソース・バンドルから既存のキー値のペアを選択して、コンポーネントのランタイム表示値をレンダリングすることもできます。
JDeveloperで生成されたリソース・バンドルでエントリを作成する手順:
JSFページで、ランタイム値を記述するコンポーネントを選択します。
たとえば、af:inputText
コンポーネントを選択します。
プロパティ・インスペクタで、プロパティのドロップダウン・リストを使用して「テキスト・リソースの選択」を選択し、リソース・バンドルに新規のエントリを作成します。
ドロップダウン・リストの「テキスト・リソースの選択」エントリは、テキスト・リソースをサポートするプロパティに対してのみ表示されます。たとえば、af:inputTextコンポーネントの「ラベル」
プロパティです。
図21-2に示すように、「表示値」入力フィールドで実行時に表示する値を書き込みます。
JDeveloperにより、「キー」入力フィールドに値が生成されます。
必要に応じて、「説明」入力フィールドに説明を記述します。
注意: JDeveloperでは、「表示値」入力フィールドに入力した値と一致するテキスト・リソースが存在する場合、「一致するテキスト・リソース」フィールドに一致するテキスト・リソースが表示されます。 |
「保存して選択」をクリックします。
JDeveloperでは、「テキスト・リソースの選択」ダイアログで定義したキー値のペアをリソース・バンドルに記述します。「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで選択するオプションにより、JDeveloperでキー値のペアが記述されるリソース・バンドルのタイプが決まります。詳細は、21.2.2項「リソース・バンドル・オプションを設定する場合の処理」を参照してください。
リソース・バンドル・エントリを定義したコンポーネント・プロパティでは、EL式を使用して、実行時にリソース・バンドルから値を取得します。たとえば、af:inputText
コンポーネントの「ラベル」プロパティは、次の式に似たEL式を参照します。
#{viewcontrollerBundle.NAME}
viewcontrollerBundle
はリソース・バンドルを参照し、NAME
はランタイム値のキーです。
リソース・バンドルには多数の名前の付いたリソースが含まれており、名前付きリソースのデータ型はString
です。バンドルに親バンドルがある場合があります。リソースがバンドル内に見つからない場合、親バンドルでリソースが検索されます。リソース・バンドルは、Javaクラス、プロパティ・ファイルまたはXLIFFファイルのいずれかです。抽象クラスjava.util.ResourceBundle
には、2つのサブクラス、java.util.PropertyResourceBundle
およびjava.util.ListResourceBundle
があります。java.util.PropertyResourceBundle
はプロパティ・ファイルに格納され、これは変換可能なテキストが含まれるプレーン・テキスト・ファイルです。プロパティ・ファイルには、String
オブジェクトについてのみ値を含めることができます。他のタイプのオブジェクトを格納する必要がある場合、かわりにjava.util.ListResourceBundle
クラスを使用する必要があります。
XLIFFの使用の詳細は、http://docs.oasis-open.org/xliff/xliff-core/xliff-core.html
を参照してください。
他のロケールのサポートを追加するには、キーの値をローカライズ済の値で置き換え、言語コード(必須)と、国コードおよび名前の識別子としてのバリアント(オプション)を付加したプロパティ・ファイル(たとえば、UIResources_it.properties
)を保存します。
java.util.ListResourceBundle
クラスでは、リソースが名前/値の配列で管理されます。各java.util.ListResourceBundle
クラスはJavaクラス・ファイル内に含まれます。ロケール固有のオブジェクトをjava.util.ListResourceBundle
クラスに格納できます。追加ロケールのサポートを加えるには、ベース・クラスからサブクラスを作成し、それをロケールまたは言語の拡張子の付いたファイルに保存して、それを変換し、クラス・ファイルにコンパイルします。
ResourceBundle
クラスはフレキシブルです。最初にロケール固有のString
オブジェクトをjava.util.PropertyResourceBundle
ファイルに挿入した場合でも、後でそれらのオブジェクトをListResourceBundle
クラスに移動できます。キーを検出するためのコールでは、java.util.ListResourceBundle
クラスおよびjava.util.PropertyResourceBundle
ファイルの両方が検索されるため、コードに影響はありません。
プロパティよりもクラスの方が優先されます。このため、クラス・ファイルとプロパティ・ファイルの両方に同じ言語に対するキーが存在する場合、クラス・ファイル内の値がユーザーに表示されます。また、ロードするバンドルを決定するための検索アルゴリズムは次のとおりです。
(ベース・クラス)+(特定の言語)+(特定の国)+(特定のバリアント)
(ベース・クラス)+(特定の言語)+(特定の国)
(ベース・クラス)+(特定の言語)
(ベース・クラス)+(デフォルトの言語)+(デフォルトの国)+(デフォルトのバリアント)
(ベース・クラス)+(デフォルトの言語)+(デフォルトの国)
(ベース・クラス)+(デフォルトの言語)
たとえば、ユーザーのブラウザがイタリア語ロケールに設定されていて、アプリケーションのデフォルト・ロケールが米語の場合、アプリケーションでは最も近いものを検出するために、次の順序で検索が実行されます。
it_IT
it
en_US
en
ベース・クラス・バンドル
ヒント: バンドルのロードに使用されたgetBundle メソッドは、ベース・クラス・バンドルを返す前に、デフォルトのロケール・クラスを検索します。一致するものが見つからなかった場合は、MissingResourceException エラーがスローされます。接尾辞のないベース・クラスが、デフォルトとして常に存在している必要があります。そうでない場合は一致が検出されず、例外がスローされます。 |
コンポーネント自体に含まれていないテキスト文字列がすべて含まれたベース・リソース・バンドルを作成する必要があります。このバンドルは、アプリケーションのデフォルト言語で作成する必要があります。リソース・バンドルは、プロパティ・ファイル、XLIFFファイルまたはJavaクラスとして作成できます。リソース・バンドル・ファイルを作成したら、「リソース・バンドルの編集」ダイアログを使用してファイルを編集できます。
リソース・バンドルをプロパティ・ファイルまたはXLIFFファイルとして作成する手順:
JDeveloperで、新規ファイルを作成します。
アプリケーション・ナビゲータで、ファイルの保存場所を右クリックし、ポップアップ・メニューから「新規」を選択して「新規ギャラリ」を開きます。
注意: ベース・リソース・バンドルのローカライズ済バージョンを作成する場合は、ベース・ファイルと同じディレクトリにファイルを保存してください。 |
「カテゴリ」ツリーで「一般」を選択し、「項目」リストで「ファイル」を選択します。「OK」をクリックします。
「ファイルの作成」で、プロパティ・ファイルを使用するファイルには表記規則<name><_lang>.properties
を使用して、XLIFFファイルを使用するファイルには表記規則<name><_lang>.xlfを使用して、ファイルの名前を入力します。<_lang>
接尾辞(ドイツ語では_de
など)は翻訳したファイルに付けられ、元となる言語では省略されます。
注意: ベース・リソース・バンドルのローカライズ済バージョンを作成する場合は、ファイル名にISO 639の小文字の言語コードを追加する必要があります。たとえば、UIResources バンドルのイタリア語バージョンは、UIResources_it.properties になります。複数の国で1つの言語を使用する場合は、ISO 3166の大文字の国コードを追加できます(たとえば、スイスの場合はit_CH)。また、オプションの非標準バリアント(たとえば、プラットフォームや地域の情報を提供するバリアント)を追加することもできます。
ベース・リソース・バンドルを作成する場合は、コードを追加しないでください。 |
ファイルにコンテンツを入力します。キーと値のペアを入力することで、コンテンツを手動で入力できます。21.3.2項「リソース・バンドル・ファイルの編集方法」で説明されているように、「リソース・バンドルの編集」ダイアログを使用してキーと値のペアを入力できます。
プロパティ・ファイルを作成している場合は、このバンドルの静的テキストの文字列ごとに、キーと値を作成します。キーは、文字列の一意の識別子です。値は、バンドルの言語でのテキスト文字列です。ベース・リソース・バンドルのローカライズ済バージョンを作成する場合、このバージョン内に存在しないキーは、ベース・クラスから値を継承します。
注意: 非ASCII文字はすべてUnicodeエスケープにするか、コンパイル時のエンコーディングを明示的に指定する必要があります。たとえば、次のように指定します。javac -encoding ISO8859_5 UIResources_it.java |
たとえば、myDemoページのタイトルのキーと値は、次のようになります。
myDemo.pageTitle=My Purchase Requests
XLIFFファイルを作成している場合は、キーと値のペアごとに適切なタグを入力します。次に例を示します。
<?xml version="1.0" encoding="windows-1252" ?> <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1"> <file source-language="en" original="myResources" datatype="xml"> <body> <trans-unit id="NAME"> <source>Name</source> <target/> <note>Name of employee</note> </trans-unit> <trans-unit id="HOME_ADDRESS"> <source>Home Address</source> <target/> <note>Adress of employee</note> </trans-unit> <trans-unit id="OFFICE_ADDRESS"> <source>Office Address</source> <target/> <note>Office building </note> </trans-unit> </body> </file> </xliff>
すべての値を入力したら、「OK」をクリックします。
リソース・バンドルをJavaクラスとして作成する手順:
JDeveloperで、新規Javaクラスを作成します。
アプリケーション・ナビゲータで、ファイルの保存場所を右クリックし、「新規」を選択して「新規ギャラリ」を開きます。
注意: ベース・リソース・バンドルのローカライズ済バージョンを作成する場合、これをベース・ファイルと同じディレクトリに保存する必要があります。 |
「カテゴリ」ツリーで「一般」を選択し、「項目」リストで「Javaクラス」を選択します。「OK」をクリックします。
「Javaクラスの作成」ダイアログで、クラスの名前とパッケージを入力します。クラスはjava.util.ListResourceBundle
を拡張している必要があります。
注意: ベース・リソース・バンドルのローカライズ済バージョンを作成する場合は、クラス名にISO 639の小文字の言語コードを追加する必要があります。たとえば、UIResources バンドルのイタリア語バージョンは、UIResources_it.java になります。複数の国で1つの言語を使用する場合は、ISO 3166の大文字の国コードを追加できます(たとえば、スイスの場合はit_CH)。また、オプションの非標準バリアント(たとえば、プラットフォームや地域の情報を提供するバリアント)を追加することもできます。
ベース・リソース・バンドルを作成する場合は、コードを追加しないでください。 |
キーと値のペアの配列を返すのみのgetContents()
メソッドを実装します。適切な値を使用して、バンドルのキーの配列を作成します。または、21.3.2項「リソース・バンドル・ファイルの編集方法」で説明されているように、「リソース・バンドルの編集」ダイアログを使用して自動的にコードを生成します。例21-5に、ベース・リソース・バンドルのJavaクラスを示します。
注意: キーはString オブジェクトであることが必要です。ベース・リソース・バンドルのローカライズ済バージョンを作成する場合、このバージョン内に存在しないキーは、ベース・クラスから値を継承します。 |
リソース・バンドル・プロパティ・ファイル、XLIFFファイルまたはJavaクラス・ファイルを作成したら、ソース・エディタを使用して編集できます。
リソース・バンドルの作成後に編集する手順:
JDeveloperで、メインメニューから「アプリケーション」→「リソース・バンドルの編集」を選択します。
「リソース・バンドルの編集」ダイアログで、図21-4に示されているように、「リソース・バンドル」ドロップダウン・リストから編集するリソース・バンドル・ファイルを選択するか、「検索」アイコンをクリックして、「リソース・バンドルの選択」ダイアログを起動します。
「リソース・バンドルの選択」ダイアログで、「ファイル・タイプ」ドロップダウン・リストからファイル・タイプを選択します。図21-5に示すように、編集するリソース・バンドルに移動します。「OK」をクリックします。
「リソース・バンドルの編集」ダイアログで、図21-6に示すように、「追加」アイコンをクリックしてキーと値のペアを追加します。完了したら「OK」をクリックします。
アプリケーションで使用されるロケールおよびリソース・バンドルをfaces-config.xml
ファイルに登録する必要があります。
アプリケーションのロケールを登録する手順:
faces-config.xml
ファイルを開き、エディタ・ウィンドウで「概要」タブをクリックします。faces-config.xml
は、<View_Project>/WEB-INF
ディレクトリにあります。
エディタ・ウィンドウ内で「アプリケーション」を選択します。
図21-7に示すように、「ロケール構成」領域で、「追加」をクリックしてプロパティ・インスペクタを開き、ロケール用のコードを追加します。
ロケールを追加したら、faces-config.xml
ファイルのコードは次のようになります。
<locale-config> <default-locale>en</default-locale> <supported-locale>ar</supported-locale> <supported-locale>ca</supported-locale> <supported-locale>cs</supported-locale> <supported-locale>da</supported-locale> <supported-locale>de</supported-locale> <supported-locale>zh_CN</supported-locale> </locale-config>
リソース・バンドルを登録する手順:
faces-config.xml
ファイルを開き、エディタ・ウィンドウで「概要」タブをクリックします。faces-config.xml
は、<View_Project>/WEB-INF
ディレクトリにあります。
エディタ・ウィンドウ内で「アプリケーション」を選択します。
「リソース・バンドル」セクションで、「追加」をクリックしてエディタ入力を有効化します。図21-8に示すように、アプリケーションにより使用されるメッセージが含まれたベース・バンドルの完全修飾名、およびEL式でバンドルの参照に使用できる変数名を入力します。
リソース・バンドルを追加したら、faces-config.xml
ファイルのコードは次のようになります。
<resource-bundle> <base-name>oracle.fodemo.storefront.StoreFrontUIBundle</base-name> <var>res</var> </resource-bundle>
JSF 1.2では、アプリケーションの各ページに、<f:loadBundle>
タグを使用してベース・リソース・バンドルをロードする必要はありません。
ページ上でベース・リソース・バンドルを使用する手順:
ページ・エンコーディングとレスポンス・エンコーディングを、サポートされているすべての言語のスーパーセットに設定します。エンコーディングが設定されていない場合、ページ・エンコーディングはデフォルトで、ページ・ディレクティブのcontentType
属性を使用して設定されたレスポンス・エンコーディングの値に設定されます。例21-6に、サンプル・ページのエンコーディングを示します。
例21-6 ページおよびレスポンスのエンコーディング
<?xml version='1.0' encoding='windows-1252'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces" xmlns:afc="http://xmlns.oracle.com/adf/faces/webcache"> <jsp:output omit-xml-declaration="true" doctype-root-element="HTML" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <f:view>
ヒント: デフォルトでは、JDeveloperによりページ・エンコーディングはwindows-1252 に設定されます。デフォルトを別のページ・エンコーディングに設定するには、次のようにします。
|
<resource-bundle>
要素用にfaces-config.xml
ファイルに定義されている変数を使用して、ページ上に表示される静的テキストの文字列を表すすべての属性を、リソース・バンドル内の適切なキーにバインドします。例21-7に、myDemoページの「View」ボタンのコードを示します。
ヒント: 次の構文をソース・エディタに入力すると、JDeveloperでは、リソース・バンドル内の文字列に解決されるキーのドロップダウン・リストが表示されます。
ドロップダウン・リストからキーを選択すると、JDeveloperによりEL式が完成されます。 |
adfBundle
キーワードを使用して、特定のリソース・バンドルのリソース文字列をJSFページのEL式として解決することもできます。
使用書式は#{adfBundle[
bundleID
] [
resource_Key
]}
で、bundleID
は完全修飾バンドルID (project.EmpMsgBundle
など)、resource_Key
はバンドル内のリソース・キー(Deptno_LABEL
など)です。例21-8では、特定のリソース・バンドルのリソース文字列をボタンのテキストの指定に使用するために、adfBundle
がどのように使用されるかを示しています。
カスタム・スキンを使用する場合で、そのスキンのカスタム・リソース・バンドルを作成した場合は、そのリソース・バンドルのローカライズ済バージョンも作成する必要があります。同様に、コントロール・ヒントを使用してテキストを設定するアプリケーションの場合は、そのテキストに対して生成されたリソース・バンドルのローカライズ済バージョンを作成する必要があります。
Oracle Metadata Services (MDS)フレームワークを使用してカスタマイズ可能なアプリケーションを開発中で、ベース・リソース・バンドルのキーと値のペアをオーバーライドするリソース・バンドル(オーバーライド・バンドル)を作成する場合、ベース・リソース・バンドルのオーバーライドをサポートするように、アプリケーションのadf-config.xml
ファイルを構成する必要があります。オーバーライド・バンドルは、カスタマイズ可能なアプリケーションで使用するベース・リソース・バンドルとは異なるキーと値のペアが含まれるリソース・バンドルです。たとえば、oracle.demo.CustAppUIBundle
という名前のベース・バンドルがある場合、例21-9
に示すように、アプリケーションのadf-config.xmlファイルのエントリを構成して、これをオーバーライド可能にします。オーバーライド済としてマークされると、そのバンドルのカスタマイズはすべて、アプリケーションのオーバーライド・バンドルに格納されます。
例21-9 adf-config.xmlファイルのオーバーライド・バンドルのエントリ
<adf-resourcebundle-config xmlns="http://xmlns.oracle.com/adf/resourcebundle/config"> <applicationBundleName>oracle/app.../xliffBundle/FusionAppsOverrideBundle</applicationBundleName> <bundleList> <bundleId override="true">oracle.demo.CustAppUIBundle</bundleId> </bundleList> </adf-resourcebundle-config>
adf-config.xml
ファイルの詳細は、A.4項「adf-config.xmlでの構成」を参照してください。MDSを使用したカスタマイズ可能なアプリケーション作成の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「MDSを使用したアプリケーションのカスタマイズ」の章を参照してください。
エンド・ユーザーのブラウザのロケール設定によりランタイム・ロケールが決まるデフォルトの動作ではなく、エンド・ユーザーが実行時にロケールを指定できるように、アプリケーションを構成することができます。アプリケーションで、エンド・ユーザーが好みのロケールを指定し、それらの設定を保存できるようにする場合は、この機能を実装します。
新規のページを作成するか、既存のページを開きます。それを次のように構成します。
ロケール情報を格納するためにバッキングBeanを参照
バッキングBean内のロケール情報を更新するために、エンド・ユーザーが実行時にコントロールを呼び出すことが可能
f:view
タグのlocale
属性によりバッキングBeanを参照
エンド・ユーザーがロケールを指定するようにページを構成する手順:
ロケール情報を格納するためのバッキングBeanでページを作成します。
詳細は、JSF JSPページを作成する方法に関する項を参照してください。
エンド・ユーザーがロケールの変更に使用できるコントロール(selectOneChoice
コンポーネントなど)を指定します。
たとえば、コンポーネント・パレットの「共通コンポーネント」パネルから、ページに「選択肢を1つ選択」をドラッグ・アンド・ドロップします。
次の例に示すように、ロケール値が格納されているバッキングBeanにコントロールをバインドします。
<af:selectOneChoice label="Select Locale" binding="#{backingBeanScope.backing_changeLocale.soc1}" id="soc1"> <af:selectItem label="French" value="FR" binding="#{backingBeanScope.backing_changeLocale.si1}" id="si1"/> ... </af:selectOneChoice>
f:view
タグのlocale
属性をバッキングBean内のロケール値にバインドします。
JSFページの構造ウィンドウで「f:view」
タグを右クリックし、「プロパティに移動」を選択します。
プロパティ・インスペクタで、ロケール属性の隣のドロップダウン・メニューを使用して、式ビルダーを開きます。
図21-9に示すように、式ビルダーを使用してバッキングBeanのロケール値にバインドします。
ページを保存します。
JDeveloperでは、ロケールの変更に使用するコマンド・コンポーネントのバッキングBeanに対する参照が生成されます。例21-10に、selectOneChoice
コンポーネントを使用する例を示します。
例21-10 バッキングBeanを参照するselectOneChoiceコンポーネント
<af:selectOneChoice label="Select Locale" binding="#{backingBeanScope.backing_changeLocale.soc1}" id="soc1"> <af:selectItem label="French" value="FR" binding="#{backingBeanScope.backing_changeLocale.si1}" id="si1"/> ... </af:selectOneChoice>
JDeveloperでは、そのページのバッキングBeanでの必須メソッドも生成されます。例21-11に、例21-10にも対応するバッキングBeanの抜粋を示します。
例21-11 ロケールを変更するためのバッキングBeanのメソッド
package view.backing; ... import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice; public class ChangeLocale { ... ... private RichSelectOneChoice soc1; ... ... ... public void setD2(RichDocument d2) { this.d2 = d2; } ... public void setSoc1(RichSelectOneChoice soc1) { this.soc1 = soc1; } public RichSelectOneChoice getSoc1() { return soc1; } public void setSi1(RichSelectItem si1) { this.si1 = si1; } ... }
実行時に、エンド・ユーザーは、アプリケーションのロケールを変更するように構成されたコマンド・コンポーネントを呼び出します。バッキングBeanには、更新されたロケール情報が格納されます。f:view
タグのlocale
属性がバッキングBeanを参照するページは、エンド・ユーザーによって指定されたロケールを使用してレンダリングされます。
エンド・ユーザーによって指定されたロケールは、アプリケーションに登録される必要があります。ロケールおよび関連のリソース・バンドルの指定の詳細は、21.3.3項「アプリケーションへのロケールおよびリソース・バンドルの登録方法」を参照してください。
ADF Facesでは、テキスト変換だけでなく、他のタイプ(テキストの向きや通貨コードなど)の変換も自動的に提供されます。アプリケーションは、ユーザーの選択したロケールに基づいて、自動的に適切に表示されます。ただし、trinidad-config.xml
ファイル内でアプリケーションの次のローカライズ設定を手動で設定することもできます。
<currency-code>
: コンバータで通貨コードが指定されていない通貨コードのフォーマットに、oracle.adf.view.faces.converter.NumberConverter
で使用されるデフォルトのISO 4217通貨コードを定義します。
<number-grouping-separator>
: 数値の桁区切りに使用される文字(カンマなど)を定義します。ADF Facesでは現在のロケールから区切り文字が自動的に導出されますが、この要素に値を指定して、デフォルトをオーバーライドできます。設定した場合、この値が、解析およびフォーマット時に、oracle.adf.view.faces.converter.NumberConverter
で使用されます。
<decimal-separator>
: 小数点(ピリオド、カンマなど)に使用されるセパレータを定義します。ADF Facesでは現在のロケールから区切り文字が自動的に導出されますが、この要素に値を指定して、デフォルトをオーバーライドできます。設定した場合、この値が、解析およびフォーマット時に、oracle.adf.view.faces.converter.NumberConverter
で使用されます。
<right-to-left>
: ページにテキストが表示される方向を定義します。ADF Facesでは現在のロケールからレンダリング方向が自動的に導出されますが、値true
またはfalse
を使用して、デフォルトのページ・レンダリング方向を明示的に設定できます。
<time-zone>
: 選択されたロケールに適切なタイムゾーンを定義します。ADF Facesでは自動的に、クライアント・ブラウザで使用されているタイムゾーンが使用されます。この値は、oracle.adf.view.faces.converter.DateTimeConverter
によってString
からDate
への変換時に使用されます。
<formatting-locale>
: 選択されたロケールに適切な日付および数値の書式を定義します。ADF FacesおよびTrinidadではデフォルトで、ローカライズされたテキストに使用されるのと同じロケールで、日付および数値の書式が設定されます。日付と数値を別のロケールで書式設定する場合、IANA形式のロケール(ja、fr-CAなど)を使用できます。この要素の内容は、IANA文字列を指すEL式またはjava.util.Locale
オブジェクトです。
trinidad-config.xml
ファイルに要素を入力することで、オプションのローカライゼーション・プロパティを構成できます。
オプションのローカライゼーション・プロパティを構成する手順:
trinidad-config.xml
ファイルを開きます。このファイルは、<View_Project>/WEB-INF
ディレクトリにあります。
コンポーネント・パレットから、ファイルに追加する要素を構造ウィンドウ内にドラッグします。空の要素がページに追加されます。
目的の値を入力します。
例21-12に、オプションのローカライゼーション要素すべてが設定されたtrinidad-config.xml
ファイルのサンプルを示します。
例21-12 通貨コードおよび数値と小数点のセパレータの構成
<!-- Set the currency code to US dollars. --> <currency-code>USD</currency-code> <!-- Set the number grouping separator to period for German --> <!-- and comma for all other languages --> <number-grouping-separator> #{view.locale.language=='de' ? '.' : ','} </number-grouping-separator> <!-- Set the decimal separator to comma for German --> <!-- and period for all other languages --> <decimal-separator> #{view.locale.language=='de' ? ',' : '.'} </decimal-separator> <!-- Render the page right-to-left for Arabic --> <!-- and left-to-right for all other languages --> <right-to-left> #{view.locale.language=='ar' ? 'true' : 'false'} </right-to-left> <formatting-locale> #{request.locale} </formatting-locale> <!-- Set the time zone to Pacific Daylight Savings Time --> <time-zone>PDT</time-zone>