ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド
11gリリース1 (11.1.1.7.0)
B52029-11
  目次へ移動
目次

前
 
次
 

21 ページの国際化およびローカライズ

この章では、ユーザーのブラウザの適切な言語でテキストが表示されるように、JSFページまたはアプリケーションを構成する方法を説明します。

この章では、次の項目について説明します。

21.1 ADF Facesページの国際化およびローカライズの概要

国際化は、特定地域の言語と文化に適応しやすくするための、製品の設計および開発のプロセスです。ローカライゼーションは、テキストを変換し、ロケール固有のコンポーネントを追加することで、特定地域の言語または文化に製品を適応させるプロセスです。上手くローカライズされたアプリケーションは、その地域で開発されたように見えます。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キーにバインドされます。

例21-2 リソース・バンドルを参照するコンポーネント・テキスト

<af:panelPage text="#{res['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

21.2 JDeveloperにおける自動リソース・バンドル統合の使用

ビジュアル・エディタでADF Facesコンポーネントを編集する際、JDeveloperでは、デフォルトのリソース・バンドルへのテキスト・リソースの自動作成がデフォルトでサポートされています。ユーザー定義の文字列を静的な値として処理するには、21.2.1項「リソース・バンドル・オプションの設定方法」で説明されているように、「プロジェクト・プロパティ」ダイアログで「バンドルの自動同期化」を無効にします。

自動リソース・バンドル統合は、ページまたはプロジェクトごとに1つのリソース・バンドル、または複数の共有バンドルをサポートするように構成できます。

次のいずれかの方法で変換可能なテキスト文字列を編集できます。

21.2.1 リソース・バンドル・オプションの設定方法

プロジェクトを作成したら、「プロジェクト・プロパティ」ダイアログにリソース・バンドル・オプションを設定できます。

プロジェクトにリソース・バンドル・オプションを設定する方法:

  1. アプリケーション・ナビゲータで、プロジェクトをダブルクリックします。

  2. 図21-3に示すように、「プロジェクト・プロパティ」ダイアログで、「リソース・バンドル」を選択してリソース・バンドル・オプションを表示します。

    図21-3 「プロジェクト・プロパティ」の「リソース・バンドル」ダイアログ

    「プロジェクト・プロパティ」の「リソース・バンドル」。
  3. JDeveloperにより自動的にデフォルトのリソース・ファイルが生成されるようにする場合は、「バンドルの自動同期化」を選択します。

  4. 次に示すいずれかのリソース・バンドル・ファイル・オプションを選択します。

    • 1プロジェクト当たり1バンドル - <ProjectName>.propertiesという名前のファイルに構成されます。

    • 1ページ当たり1バンドル - <PageName>.propertiesという名前のファイルに構成されます。

    • 複数の共有バンドル

  5. ドロップダウン・リストからリソース・バンドル・タイプを選択します。

    • XML Localization Interchange File Format (XLIFF)バンドル

    • リスト・リソース・バンドル

    • プロパティ・バンドル

  6. 「OK」をクリックします。

21.2.2 リソース・バンドル・オプションを設定する場合の処理

JDeveloperでは、図21-3に示すように、「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで行った選択に基づいて、特定のタイプの1つ以上のリソース・バンドルが生成されます。図21-2に示されている「テキスト・リソースの選択」ダイアログを最初に開いたときに、リソース・バンドルが生成されます。

たとえば、「1プロジェクト当たり1バンドル」チェック・ボックスを選択し、「リソース・バンドル・タイプ」ドロップダウン・リストから「リスト・リソース・バンドル」値を選択するとします。初めて「テキスト・リソースの選択」ダイアログを呼び出すと、JDeveloperではそのプロジェクト用に1つのリソース・バンドルが生成されます。生成されたリソース・バンドルは、「プロジェクト・プロパティ」ダイアログのデフォルトのプロジェクト・バンドル名をとったJavaクラスです(ViewControllerBundle.javaなど)。

JDeveloperでは、「XMLローカライズ交換ファイル形式(XLIFF)バンドル」オプションを選択した場合は.xlfファイルとしてリソース・バンドルが、「プロパティ・バンドル」オプションを選択した場合は.propertiesファイルが生成されます。

デフォルトでは、JDeveloperにより、プロジェクトの「アプリケーション・ソース」ディレクトリの「view」サブディレクトリに、生成されたリソース・バンドルが作成されます。

21.2.3 JDeveloper生成リソース・バンドルでのエントリの作成方法

JDeveloperでは、「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで選択した値に基づいて、1つ以上のリソース・バンドルが生成されます。プロパティ・インスペクタのコンポーネント・プロパティから「テキスト・リソースの選択」ダイアログを初めて呼び出したときに、リソース・バンドルが生成されます。

JDeveloperでは、「テキスト・リソースの選択」ダイアログで入力した値に基づいて、リソース・バンドルにキー値のペアが記述されます。また、リソース・バンドルから既存のキー値のペアを選択して、コンポーネントのランタイム表示値をレンダリングすることもできます。

JDeveloperで生成されたリソース・バンドルでエントリを作成する手順:

  1. JSFページで、ランタイム値を記述するコンポーネントを選択します。

    たとえば、af:inputTextコンポーネントを選択します。

  2. プロパティ・インスペクタで、プロパティのドロップダウン・リストを使用して「テキスト・リソースの選択」を選択し、リソース・バンドルに新規のエントリを作成します。

    ドロップダウン・リストの「テキスト・リソースの選択」エントリは、テキスト・リソースをサポートするプロパティに対してのみ表示されます。たとえば、af:inputTextコンポーネントの「ラベル」プロパティです。

  3. 図21-2に示すように、「表示値」入力フィールドで実行時に表示する値を書き込みます。

    JDeveloperにより、「キー」入力フィールドに値が生成されます。

  4. 必要に応じて、「説明」入力フィールドに説明を記述します。


    注意:

    JDeveloperでは、「表示値」入力フィールドに入力した値と一致するテキスト・リソースが存在する場合、「一致するテキスト・リソース」フィールドに一致するテキスト・リソースが表示されます。


  5. 「保存して選択」をクリックします。

21.2.4 JDeveloper生成リソース・バンドルでエントリを生成する場合の処理

JDeveloperでは、「テキスト・リソースの選択」ダイアログで定義したキー値のペアをリソース・バンドルに記述します。「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで選択するオプションにより、JDeveloperでキー値のペアが記述されるリソース・バンドルのタイプが決まります。詳細は、21.2.2項「リソース・バンドル・オプションを設定する場合の処理」を参照してください。

リソース・バンドル・エントリを定義したコンポーネント・プロパティでは、EL式を使用して、実行時にリソース・バンドルから値を取得します。たとえば、af:inputTextコンポーネントの「ラベル」プロパティは、次の式に似たEL式を参照します。

#{viewcontrollerBundle.NAME}

viewcontrollerBundleはリソース・バンドルを参照し、NAMEはランタイム値のキーです。

21.3 リソース・バンドルおよびロケールの手動による定義

リソース・バンドルには多数の名前の付いたリソースが含まれており、名前付きリソースのデータ型は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ファイルの両方が検索されるため、コードに影響はありません。

プロパティよりもクラスの方が優先されます。このため、クラス・ファイルとプロパティ・ファイルの両方に同じ言語に対するキーが存在する場合、クラス・ファイル内の値がユーザーに表示されます。また、ロードするバンドルを決定するための検索アルゴリズムは次のとおりです。

  1. (ベース・クラス)+(特定の言語)+(特定の国)+(特定のバリアント)

  2. (ベース・クラス)+(特定の言語)+(特定の国)

  3. (ベース・クラス)+(特定の言語)

  4. (ベース・クラス)+(デフォルトの言語)+(デフォルトの国)+(デフォルトのバリアント)

  5. (ベース・クラス)+(デフォルトの言語)+(デフォルトの国)

  6. (ベース・クラス)+(デフォルトの言語)

たとえば、ユーザーのブラウザがイタリア語ロケールに設定されていて、アプリケーションのデフォルト・ロケールが米語の場合、アプリケーションでは最も近いものを検出するために、次の順序で検索が実行されます。

  1. it_IT

  2. it

  3. en_US

  4. en

  5. ベース・クラス・バンドル


ヒント:

バンドルのロードに使用されたgetBundleメソッドは、ベース・クラス・バンドルを返す前に、デフォルトのロケール・クラスを検索します。一致するものが見つからなかった場合は、MissingResourceExceptionエラーがスローされます。接尾辞のないベース・クラスが、デフォルトとして常に存在している必要があります。そうでない場合は一致が検出されず、例外がスローされます。


21.3.1 ベース・リソース・バンドルの定義方法

コンポーネント自体に含まれていないテキスト文字列がすべて含まれたベース・リソース・バンドルを作成する必要があります。このバンドルは、アプリケーションのデフォルト言語で作成する必要があります。リソース・バンドルは、プロパティ・ファイル、XLIFFファイルまたはJavaクラスとして作成できます。リソース・バンドル・ファイルを作成したら、「リソース・バンドルの編集」ダイアログを使用してファイルを編集できます。

リソース・バンドルをプロパティ・ファイルまたはXLIFFファイルとして作成する手順:

  1. JDeveloperで、新規ファイルを作成します。

    • アプリケーション・ナビゲータで、ファイルの保存場所を右クリックし、ポップアップ・メニューから「新規」を選択して「新規ギャラリ」を開きます。


      注意:

      ベース・リソース・バンドルのローカライズ済バージョンを作成する場合は、ベース・ファイルと同じディレクトリにファイルを保存してください。


    • 「カテゴリ」ツリーで「一般」を選択し、「項目」リストで「ファイル」を選択します。「OK」をクリックします。

    • 「ファイルの作成」で、プロパティ・ファイルを使用するファイルには表記規則<name><_lang>.propertiesを使用して、XLIFFファイルを使用するファイルには表記規則<name><_lang>.xlfを使用して、ファイルの名前を入力します。<_lang>接尾辞(ドイツ語では_deなど)は翻訳したファイルに付けられ、元となる言語では省略されます。


      注意:

      ベース・リソース・バンドルのローカライズ済バージョンを作成する場合は、ファイル名にISO 639の小文字の言語コードを追加する必要があります。たとえば、UIResourcesバンドルのイタリア語バージョンは、UIResources_it.propertiesになります。複数の国で1つの言語を使用する場合は、ISO 3166の大文字の国コードを追加できます(たとえば、スイスの場合はit_CH)。また、オプションの非標準バリアント(たとえば、プラットフォームや地域の情報を提供するバリアント)を追加することもできます。

      ベース・リソース・バンドルを作成する場合は、コードを追加しないでください。


  2. ファイルにコンテンツを入力します。キーと値のペアを入力することで、コンテンツを手動で入力できます。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>
      
  3. すべての値を入力したら、「OK」をクリックします。

リソース・バンドルをJavaクラスとして作成する手順:

  1. JDeveloperで、新規Javaクラスを作成します。

    • アプリケーション・ナビゲータで、ファイルの保存場所を右クリックし、「新規」を選択して「新規ギャラリ」を開きます。


      注意:

      ベース・リソース・バンドルのローカライズ済バージョンを作成する場合、これをベース・ファイルと同じディレクトリに保存する必要があります。


    • 「カテゴリ」ツリーで「一般」を選択し、「項目」リストで「Javaクラス」を選択します。「OK」をクリックします。

    • 「Javaクラスの作成」ダイアログで、クラスの名前とパッケージを入力します。クラスはjava.util.ListResourceBundleを拡張している必要があります。


      注意:

      ベース・リソース・バンドルのローカライズ済バージョンを作成する場合は、クラス名にISO 639の小文字の言語コードを追加する必要があります。たとえば、UIResourcesバンドルのイタリア語バージョンは、UIResources_it.javaになります。複数の国で1つの言語を使用する場合は、ISO 3166の大文字の国コードを追加できます(たとえば、スイスの場合はit_CH)。また、オプションの非標準バリアント(たとえば、プラットフォームや地域の情報を提供するバリアント)を追加することもできます。

      ベース・リソース・バンドルを作成する場合は、コードを追加しないでください。


  2. キーと値のペアの配列を返すのみのgetContents()メソッドを実装します。適切な値を使用して、バンドルのキーの配列を作成します。または、21.3.2項「リソース・バンドル・ファイルの編集方法」で説明されているように、「リソース・バンドルの編集」ダイアログを使用して自動的にコードを生成します。例21-5に、ベース・リソース・バンドルのJavaクラスを示します。


    注意:

    キーはStringオブジェクトであることが必要です。ベース・リソース・バンドルのローカライズ済バージョンを作成する場合、このバージョン内に存在しないキーは、ベース・クラスから値を継承します。


    例21-5 ベース・リソース・バンドルのJavaクラス

    package sample;
    
    import java.util.ListResourceBundle;
    
    public class MyResources extends ListResourceBundle {
      public Object[][] getContents() {
        return contents;
    }
    static final Object[][] contents {
      {"button_Search", Search"},
      {"button_Reset", "Reset"},
      };
    }
    

21.3.2 リソース・バンドル・ファイルの編集方法

リソース・バンドル・プロパティ・ファイル、XLIFFファイルまたはJavaクラス・ファイルを作成したら、ソース・エディタを使用して編集できます。

リソース・バンドルの作成後に編集する手順:

  1. JDeveloperで、メインメニューから「アプリケーション」→「リソース・バンドルの編集」を選択します。

  2. 「リソース・バンドルの編集」ダイアログで、図21-4に示されているように、「リソース・バンドル」ドロップダウン・リストから編集するリソース・バンドル・ファイルを選択するか、「検索」アイコンをクリックして、「リソース・バンドルの選択」ダイアログを起動します。

    図21-4 「リソース・バンドルの編集」ダイアログ

    「リソース・バンドルの編集」ダイアログ
  3. 「リソース・バンドルの選択」ダイアログで、「ファイル・タイプ」ドロップダウン・リストからファイル・タイプを選択します。図21-5に示すように、編集するリソース・バンドルに移動します。「OK」をクリックします。

    図21-5 「リソース・バンドルの選択」ダイアログ

    「リソース・バンドルの選択」ダイアログ
  4. 「リソース・バンドルの編集」ダイアログで、図21-6に示すように、「追加」アイコンをクリックしてキーと値のペアを追加します。完了したら「OK」をクリックします。

    図21-6 リソース・バンドルへの値の追加

    リソース・バンドルへの値の追加

21.3.3 アプリケーションへのロケールおよびリソース・バンドルの登録方法

アプリケーションで使用されるロケールおよびリソース・バンドルをfaces-config.xmlファイルに登録する必要があります。

アプリケーションのロケールを登録する手順:

  1. faces-config.xmlファイルを開き、エディタ・ウィンドウで「概要」タブをクリックします。faces-config.xmlは、<View_Project>/WEB-INFディレクトリにあります。

  2. エディタ・ウィンドウ内で「アプリケーション」を選択します。

  3. 図21-7に示すように、「ロケール構成」領域で、「追加」をクリックしてプロパティ・インスペクタを開き、ロケール用のコードを追加します。

    図21-7 faces-config.xmlへのロケールの追加

    faces-config.xmlへのロケールの追加。

    ロケールを追加したら、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_Ch</supported-locale>
     </locale-config>
    

リソース・バンドルを登録する手順:

  1. faces-config.xmlファイルを開き、エディタ・ウィンドウで「概要」タブをクリックします。faces-config.xmlは、<View_Project>/WEB-INFディレクトリにあります。

  2. エディタ・ウィンドウ内で「アプリケーション」を選択します。

  3. 「リソース・バンドル」セクションで、「追加」をクリックしてエディタ入力を有効化します。図21-8に示すように、アプリケーションにより使用されるメッセージが含まれたベース・バンドルの完全修飾名、およびEL式でバンドルの参照に使用できる変数名を入力します。

    図21-8 faces-config.xmlへのリソース・バンドルの追加

    faces-config.xmlへのリソース・バンドルの追加。

    リソース・バンドルを追加したら、faces-config.xmlファイルのコードは次のようになります。

    <resource-bundle>
          <base-name>oracle.fodemo.storefront.StoreFrontUIBundle</base-name>
          <var>res</var>
    </resource-bundle>
    

21.3.4 アプリケーションでのリソース・バンドルの使用方法

JSF 1.2では、アプリケーションの各ページに、<f:loadBundle>タグを使用してベース・リソース・バンドルをロードする必要はありません。

ページ上でベース・リソース・バンドルを使用する手順:

  1. ページ・エンコーディングとレスポンス・エンコーディングを、サポートされているすべての言語のスーパーセットに設定します。エンコーディングが設定されていない場合、ページ・エンコーディングはデフォルトで、ページ・ディレクティブの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に設定されます。デフォルトを別のページ・エンコーディングに設定するには、次のようにします。

    1. メニューから「ツール」「設定」を選択します。

    2. 左側のペインで「環境」を選択します(まだ選択されていない場合)。

    3. 「エンコーディング」を優先されるデフォルトに設定します。


  2. <resource-bundle>要素用にfaces-config.xmlファイルに定義されている変数を使用して、ページ上に表示される静的テキストの文字列を表すすべての属性を、リソース・バンドル内の適切なキーにバインドします。例21-7に、myDemoページの「View」ボタンのコードを示します。

    例21-7 リソース・バンドルへのバインド

    <af:commandButton text="#{res['myDemo.buttonbar.view']}"
                      . . . />
    

    ヒント:

    次の構文をソース・エディタに入力すると、JDeveloperでは、リソース・バンドル内の文字列に解決されるキーのドロップダウン・リストが表示されます。

    <af:commandButton text="#{res.

    ドロップダウン・リストからキーを選択すると、JDeveloperによりEL式が完成されます。


  3. adfBundleキーワードを使用して、特定のリソース・バンドルのリソース文字列をJSFページのEL式として解決することもできます。

    使用書式は#{adfBundle[ bundleID ] [ resource_Key ]}で、bundleIDは完全修飾バンドルID (project.EmpMsgBundleなど)、resource_Keyはバンドル内のリソース・キー(Deptno_LABELなど)です。例21-8では、特定のリソース・バンドルのリソース文字列をボタンのテキストの指定に使用するために、adfBundleがどのように使用されるかを示しています。

    例21-8 adfBundleを使用したバインド

    <af:commandButton text="#{adfBundle['project.EmpMsgBundle'] ['Deptno_LABEL']}"
    

21.3.5 カスタム・スキンおよびコントロール・ヒントに関する必知事項

カスタム・スキンを使用する場合で、そのスキンのカスタム・リソース・バンドルを作成した場合は、そのリソース・バンドルのローカライズ済バージョンも作成する必要があります。同様に、コントロール・ヒントを使用してテキストを設定するアプリケーションの場合は、そのテキストに対して生成されたリソース・バンドルのローカライズ済バージョンを作成する必要があります。

21.3.6 カスタマイズ可能アプリケーションでのリソース・バンドルのオーバーライドに関する必知事項

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を使用したアプリケーションのカスタマイズ」の章を参照してください。

21.4 エンド・ユーザーが実行時にロケールを指定するためのページの構成

エンド・ユーザーのブラウザのロケール設定によりランタイム・ロケールが決まるデフォルトの動作ではなく、エンド・ユーザーが実行時にロケールを指定できるように、アプリケーションを構成することができます。アプリケーションで、エンド・ユーザーが好みのロケールを指定し、それらの設定を保存できるようにする場合は、この機能を実装します。

21.4.1 エンド・ユーザーがロケールを指定するようにページを構成する方法

新規のページを作成するか、既存のページを開きます。それを次のように構成します。

  • ロケール情報を格納するためにバッキングBeanを参照

  • バッキングBean内のロケール情報を更新するために、エンド・ユーザーが実行時にコントロールを呼び出すことが可能

  • f:viewタグのlocale属性によりバッキングBeanを参照

エンド・ユーザーがロケールを指定するようにページを構成する手順:

  1. ロケール情報を格納するためのバッキングBeanでページを作成します。

    詳細は、JSF JSPページを作成する方法に関する項を参照してください。

  2. エンド・ユーザーがロケールの変更に使用できるコントロール(selectOneChoiceコンポーネントなど)を指定します。

    たとえば、コンポーネント・パレットの「共通コンポーネント」パネルから、ページに「選択肢を1つ選択」をドラッグ・アンド・ドロップします。

  3. 次の例に示すように、ロケール値が格納されているバッキング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>
    
  4. f:viewタグのlocale属性をバッキングBean内のロケール値にバインドします。

    1. JSFページの構造ウィンドウで「f:view」タグを右クリックし、「プロパティに移動」を選択します。

    2. プロパティ・インスペクタで、ロケール属性の隣のドロップダウン・メニューを使用して、式ビルダーを開きます。

    3. 図21-9に示すように、式ビルダーを使用してバッキングBeanのロケール値にバインドします。

      図21-9 locale属性をバッキングBeanにバインドする式ビルダー

      ロケール属性をバッキングBeanにバインドする式ビルダー
  5. ページを保存します。

21.4.2 ロケールを指定するためにページを構成する場合の処理

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;
    }
...
}

21.4.3 エンド・ユーザーがロケールを指定する場合の実行時の処理

実行時に、エンド・ユーザーは、アプリケーションのロケールを変更するように構成されたコマンド・コンポーネントを呼び出します。バッキングBeanには、更新されたロケール情報が格納されます。f:viewタグのlocale属性がバッキングBeanを参照するページは、エンド・ユーザーによって指定されたロケールを使用してレンダリングされます。

エンド・ユーザーによって指定されたロケールは、アプリケーションに登録される必要があります。ロケールおよび関連のリソース・バンドルの指定の詳細は、21.3.3項「アプリケーションへのロケールおよびリソース・バンドルの登録方法」を参照してください。

21.5 ADF Facesのオプションのローカライゼーション・プロパティの構成

ADF Facesでは、テキスト変換だけでなく、他のタイプ(テキストの向きや通貨コードなど)の変換も自動的に提供されます。アプリケーションは、ユーザーの選択したロケールに基づいて、自動的に適切に表示されます。ただし、trinidad-config.xmlファイル内でアプリケーションの次のローカライズ設定を手動で設定することもできます。

21.5.1 オプションのローカライゼーション・プロパティの構成方法

trinidad-config.xmlファイルに要素を入力することで、オプションのローカライゼーション・プロパティを構成できます。

オプションのローカライゼーション・プロパティを構成する手順:

  1. trinidad-config.xmlファイルを開きます。このファイルは、<View_Project>/WEB-INFディレクトリにあります。

  2. コンポーネント・パレットから、ファイルに追加する要素を構造ウィンドウ内にドラッグします。空の要素がページに追加されます。

  3. 目的の値を入力します。

例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>