ヘッダーをスキップ

Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.1.1.0.0 E64867-01 |
| 目次

前 | 次 |

# 6 MAFアプリケーションのローカライズ

この章では、MAFアプリケーションを様々なロケールおよび国際的なユーザー環境で使用されるように構成する方法について説明します。JDeveloperで自動的にリソース・バンドルを作成する機能、リソース・バンドルおよびロケールを手動で定義する方法およびアプリケーションのローカリゼーション・プロパティの構成方法などの機能についても説明します。

この章の内容は次のとおりです。

- 第6.1項「MAFアプリケーションのローカライズの概要」

- 第6.2項「リソース・バンドル・オプションの設定」

- 第6.3項「リソース・バンドル・オプションの選択時に行われる処理」

- 第6.4項「リソース・バンドルへの文字列の入力」

- 第6.5項「リソース・バンドル追加時の処理」

- 第6.6項「MAF AMX UIコンポーネントの文字列のローカライズ」

- 第6.7項「MAF AMX UIコンポーネントのプロジェクト・レベルのリソース・バンドルの作成時に行われる処理」

- 第6.8項「イメージ・ファイルのローカライズに関する必知事項」

- 第6.9項「リソース・バンドル・ファイルの編集」

- 第6.10項「iOSアプリケーションのXLIFFファイルに関する必知事項」

- 第6.11項「iOSアプリケーションの国際化に関する必知事項」

## 6.1 MAFアプリケーションのローカライズの概要

ローカライゼーションは、テキストを変換し、ロケール固有のコンポーネントを追加することで、特定地域の言語または文化にアプリケーションを適応させるプロセスです。様々なロケールを使用するようにMAFアプリケーションとそのユーザー・インタフェース・ページを構成することによって、MAFアプリケーションがモバイル・デバイスで設定されている言語用に作成されたもののように表示できます。たとえば、フランス語を話す人がMAFアプリケーションを表示できるようにすることでこのアプリケーションの使用を拡大する場合、デバイスのSpringboardおよびMAF Webビュー内の両方で使用されるテキスト文字列およびイメージがフランス語で表示されるように(つまり、productsはles produitsなどに変換されます)アプリケーションをローカライズできます。

JDeveloperでは、これらのテキスト・リソースを28言語に自動的に変換します。

変換可能な文字列(バリデータ・エラー・メッセージまたは属性コントロール・ヒントなど)を定義すると、JDeveloperでは、プロジェクト・レベルのリソース・バンドル・ファイルに変換可能な文字列が格納されます。MAFでは、英語の言語テキスト・リソースを指定します(ただし他の言語では、任意のツールを使用して、リソース・バンドル・ファイルを生成できます)。MAFアプリケーションを構成して、アプリケーションおよびビュー・コントローラ・プロジェクト・レベルの両方で変換可能なUI文字列を格納できます。

MAFは、ローカライゼーションにXLIFF (XML Localization Interchange File Format)ファイルのみを使用します。つまり、JDeveloperは、文字列を格納するためにリソース・バンドル`.xlf`ファイルを作成します。XLFFの詳細は、次を参照してください。

`http://docs.oasis-open.org/xliff/xliff-core/xliff-core.html`

## 6.2 リソース・バンドル・オプションの設定

プロジェクトの「リソース・バンドル」設定ページを使用して、ビュー・コントローラ・プロジェクトおよびアプリケーション・コントローラ・プロジェクトのリソース・バンドルを作成できます(図6-1を参照)。

図6-1「プロジェクト・プロパティ」の「リソース・バンドル」ページ

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

1. 「アプリケーション」ウィンドウで、プロジェクトをダブルクリックします。

2. 「プロジェクト・プロパティ」ダイアログで、「リソース・バンドル」を選択します。

3. 自動的にデフォルトのリソース・ファイルを生成するには、「バンドルの自動同期化」を選択します。

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

   - 1プロジェクト当たり1バンドル: `<ProjectName>.xlf`という名前のファイルに構成されます。詳細は、第6.3項「リソース・バンドル・オプションの選択時に行われる処理」を参照してください。

   - 1ファイル当たり1バンドル: リソースをファイル(`maf-feature.xml`、`maf-application.xml`または「MAF AMXページ」)に格納するたびに新しいバンドルが作成されます。このため、各ファイルには独自のバンドルがあります。このオプションによりリソース・バンドルの数が各ファイル1つに制限されるため、このオプションを選択した場合、JDeveloperでは2つ目のバンドルを作成できません。

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

   注意: Xliffリソース・バンドルは、MAFで使用される唯一のリソース・バンドルの形式です。このページの詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。

## 6.3 リソース・バンドル・オプションの選択時に行われる処理

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

「1プロジェクト当たり1バンドル」を選択し、`「リソース・バンドル・タイプ」`ドロップダウン・リストから、「リスト・リソース・バンドル」値を選択したとします。初めて「テキスト・リソースの選択」ダイアログを呼び出すと、JDeveloperではそのプロジェクト用に1つのリソース・バンドルが生成されます。

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

## 6.4 リソース・バンドルへの文字列の入力

プロジェクト・レベルでは、「リソース・バンドル」ダイアログを使用してリソース・バンドル・ファイルを作成します。このダイアログには、「プロパティ」ウィンドウで「テキスト・リソースの選択」をクリックすることでアクセスします。このダイアログでは、`表6-1`および`表6-2`に示すmaf-application.xml属性およびmaf-feature.xml属性のベース・リソース・バンドルに、テキスト・リソースを自動的に作成できます。

アプリケーション・レベルでは、アプリケーション名やプリファレンス・ページのラベルなどの属性の文字列をローカライズできます。表6-1にこれらを示します。

表6-1 MAFアプリケーションのローカライズ可能な属性

要素 | 属性
--- | ---
`<adfmf:Application>` | `name`
`<adfmf:PreferenceGroup>` | `label`
`<adfmf:PreferencePage>` | `label`
`<adfmf:PreferenceBoolean>` | `label`
`<adfmf:PreferenceText>` | `label`
`<adfmf:PreferenceNumber>` | `label`
`<adfmf:PreferenceList>` | `label`
`<adfmf:PreferenceValue>` | `name`

プロジェクト(ビュー・コントローラ)レベルでは、表6-2に示すような、アプリケーション機能関連の属性をローカライズできます。

表6-2 アプリケーション機能のローカライズ可能な属性

要素 | 属性
--- | ---
`<adfmf:Feature>` | `name`
`<adfmf:Constraint>` | `value`
`<adfmf:Parameter>` | `value`
`<adfmf:PreferencePage>` | `label`
`<adfmf:PrefrenceGroup>` | `label`
`<adfmf:PreferenceBoolean>` | `label`
`<adfmf:PreferenceText>` | `label`
`<adfmf:PreferenceNumber>` | `label`
`<adfmf:PreferenceList>` | `label`
`<adfmf:PreferenceValue>` | `name`

リソース・バンドルにローカライズ可能な文字列を作成するには:

1. 「プロパティ」ウィンドウで`Name`などの属性を選択します(図6-2参照)。

2. 「テキスト・リソースの選択」を選択します。図6-2に、「プロパティ」ウィンドウで選択されたアプリケーション名属性を示しています。

   図6-2 テキスト・リソースを選択するダイアログ

3. 「テキスト・リソースの選択」ダイアログ(図6-3を参照)で、表示名とキーを入力して新しい文字列リソースを作成し、「保存して選択」をクリックします。

   図6-3 「テキスト・リソースの選択」ダイアログ

## 6.5 リソース・バンドル追加時の処理

「テキスト・リソースの選択」ダイアログでリソースを追加すると、JDeveloperによってXLFファイルに新しいエントリが作成されます(例6-1を参照)。

例6-1 リソース・バンドルのテキスト・リソース

    <?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="mobile.ViewControllerBundle" datatype="x-oracle-adf">
        <body>
          <trans-unit id="ACME_SALES">
            <source>Acme Sales</source>
            <target/>
          </trans-unit>
        </body>
      </file>
    </xliff>

属性を最初にローカライズすると、JDeveloperによって`<adfmf:loadbundle>`要素が追加されます。この要素の`basename`属性が、新しく作成したリソース・バンドルを参照します。

さらにJDeveloperは、ローカライズされた属性文字列を、リソース・バンドル内で定義された文字列のキーを参照するEL式に変更します。たとえば、JDeveloperは、Acme Salesというアプリケーション名属性を、「テキスト・リソースの選択」ダイアログでキーとして入力されたACME_SALES値に基づいて、`name="#{acmeBundle.Acme_Sales}"`に変更します。

アプリケーション・レベルにはリソース・バンドル・ファイルが1つしか存在しないので、JDeveloperは、ローカライズされた各文字列を同じリソース・バンドル・ファイルに追加します。

`maf-application.xml`および`maf-feature.xml`ファイルには、それぞれ`adfmf:loadBundle`要素が1つのみ格納されています。アプリケーションをデプロイすると、リソース・バンドルはランタイムによって想定される言語フォーマットに変換されます。

## 6.6 MAF AMX UIコンポーネントの文字列のローカライズ

ボタン・コンポーネント(`<amx:commandButton>`)の`text`属性のようなMAF AMX UIコンポーネントの属性には、リソース・バンドルを作成できます。表6-3に、これらのMAF AMX UIコンポーネントを示します。

表6-3 MAF AMX UIコンポーネントのローカライズ可能な属性

コンポーネント | 属性
--- | ---
`<amx:inputDate>` | `label`
`<amx:inputNumberSlider>` | `label`
`<amx:panelLabelAndMessage>` | `label`
`<amx:selectBooleanCheckBox>` | `label`
`<amx:selectBooleanSwitch>` | `label`
`<amx:selectItem>` | `label`
`<amx:selectManyCheckBox>` | `label`
`<amx:selectManyChoice>` | `label`
`<amx:selectOneButton>` | `label`
`<amx:selectOneChoice>` | `label`
`<amx:selectOneRadio>` | `label`
`<amx:commandButton>` | `text`
`<amx:commandLink>` | `text`
`<amx:goLink>` | `text`
`<amx:inputText>` | `label`、`value`、`hintText`
`<amx:outputText>` | `value`

MAF AMX UIコンポーネントで文字列を使用する手順:

1. 「プロパティ」ウィンドウで、出力テキスト(`outputText`)コンポーネント(図6-4)に対して定義されたvalue属性などの属性を選択します。

   図6-4 MAF AMXコンポーネントに対するテキスト・リソースの選択

2. 「テキスト・リソースの選択」を選択します。

3. 「テキスト・リソースの選択」ダイアログ(図6-5を参照)で、表示名とキーを入力して新しい文字列リソースを作成し、「保存して選択」をクリックします。

   図6-5 リソース・バンドルへの文字列の追加

## 6.7 MAF AMX UIコンポーネントのプロジェクト・レベルのリソース・バンドルの作成時に行われる処理

出力テキスト(`outputText`)コンポーネント(例6-2)の`value`属性などのコンポーネントをローカライズする場合、JDeveloperでは、文字列をEL式(例6-2の`#{viewcontrollerBundle.LES_PRODUITS}`など)に変換します。

例6-2 MAF AMXコンポーネントのローカライズ

    <amx:facet name="header">
          <amx:outputText value="#{viewcontrollerBundle.LES_PRODUITS}"
                          id="ot1"
                          rendered="true"/>
    </amx:facet>

さらに、`例6-3`のViewControllerBundle.xlfのように、JDeveloperはプロジェクトのデフォルト・パッケージの下にリソース・バンドルを作成します。生成されたMAF AMXのバンドルのロード(`loadBundle`)コンポーネントでは、`basename`がこのパッケージを示しています(例6-3を参照)。

例6-3 バンドルのロード(loadBundle)コンポーネント

    <amx:loadBundle basename="mycomp.mobile.ViewControllerBundle"
                    var="viewcontrollerBundle"
                    id="lb1"/>

## 6.8 イメージ・ファイルのローカライズに関する必知事項

イメージがテキストを格納していたり、特定の国または地域を反映している場合(たとえば旗のピクチャなど)、ローカライゼーション・プロセスの一環として代替イメージを指定できます。イメージをハードコード化することはできません(例: `icon="/feature1/test.png"`)。そのかわり、イメージのパスの`<trans-unit>`要素を追加することで、`ViewControllerBundle.xlf`ファイルを手動で編集する必要があります(例6-4を参照)。

例6-4 <amx:image>コンポーネントのリソースの定義

    <trans-unit id="IMAGEPATH">
         <source>/feature1/test.jpg</source>
         <target/>
    </trans-unit>

注意: `例6-4`の<source>要素で定義されているイメージの場所は、`ViewController\public_html`のアプリケーション機能ファイルの場所を基準にした相対的な場所です。または、イメージ・ファイルの名前を入力することもできます(例: `<source>test.png</source>`)。第5.4項「外部リソースの選択に関する必知事項」も参照してください。

`ViewControllerBundle.xlf`の更新後、「式ビルダー」を使用して、`icon`属性の`source`属性のEL式を定義します(図6-6を参照)。

図6-6 ローカライズされたアイコン・イメージのEL式の作成

## 6.9 リソース・バンドル・ファイルの編集

XLIFFファイルを作成した後で、ソース・エディタを使用してこのファイルを編集できます。

リソース・バンドル・ファイルを編集するには:

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

2. 「リソース・バンドルの編集」ダイアログ(図6-7を参照)で、「リソース・バンドル」ドロップダウン・リストから編集するリソース・バンドル・ファイルを選択するか、編集するリソース・バンドル・ファイルが「リソース・バンドル」ドロップダウン・リストに表示されない場合は、「検索」アイコンをクリックして「リソース・バンドルの選択」ダイアログを起動します。

   図6-7 リソース・バンドル文字列の編集

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

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

## 6.10 iOSアプリケーションのXLIFFファイルに関する必知事項

`<adfmf:loadBundle>`要素によって記述された場所には、1つ以上のXLIFFファイルが存在している必要があります。XLIFFファイルのファミリには、次のファイルが含まれています。

- ベースXLIFFファイル: ベースXLIFFファイルの名前は、`basename`属性によって指定されたパス内の最後のトークンと一致する必要があります。このファイルには`.xlf`という拡張子が付きます(例: `ViewControllerBundle.xlf`)。次の定義では、ファイルの名称は`ViewControllerBundle`です。

      <adfmf:loadBundle var="stringBundle" basename="view.ViewControllerBundle"/>

- ゼロ個以上のローカライズされたXLIFFファイル: 各ベースXLIFFファイルには、ゼロ個(以上)のローカライズされたXLIFFファイルを存在させることができます。各ファイルには次の決まりがあります。

  - ファイル拡張子は`.xlf`である必要があります。

  - 対応するベースXLIFFファイルと同じディレクトリにコロケートさせる必要があります。

  - ファイル名の形式は次のようになります。

        <BASE_XLIFF_FILE_NAME>_<LANGUAGE_TOKEN>.xlf

    説明:

    - `<BASE_XLIFF_FILE_NAME>`は、ベースXLIFFファイル名です(拡張子`.xlf`は含みません)。

    - `<LANGUAGE_TOKEN>`の形式は次のとおりです。

          <ISO-639-lowercase-language-code>

      注意: MAFは、国または地域をサポートしていません。

      たとえば、スペインの場合、言語トークンは`es`になります。

    たとえば、言語コードが`en`、`es`、`fr`の場合、`stringBundle.xlf`という名前のベースXLIFFを参照するXLIFFファイルのローカライズされたファイル名は次のようになります。

    - `stringBundle_en.xlf`

    - `stringBundle_es.xlf`

    - `stringBundle_fr.xlf`

## 6.11 iOSアプリケーションの国際化に関する必知事項

`maf-application.xml`および`maf-feature.xml`ファイルのローカライズ可能な要素は、表6-2および表6-1に示す属性内で、ELに似た文字列を使用して国際化された文字列を参照します。これらの構成ファイルはアプリケーション・ライフサイクルの初期に読み取られるので、これらの文字列は実行時にはEL文として評価されません。そのかわり、これらの文字列は、ネイティブ・デバイス変換インフラストラクチャにおいて変換された文字列の完全なキーとして取得されます。

式言語の構文は`"${BUNDLE_NAME.STRING_KEY}"`ですが、MAFは`"#{}"`によって囲まれた文字列全体をキーとして使用して、変換された文字列を検索します。これらの文字列の形式は、`#{bundleName.['My.String.ID']}` (ここではXLIFF文字列がピリオドによって分割されています)と、`#{bundleName.['MyStringID']}` (これはピリオドによって分割されない文字列の識別子に対してのみ使用されます)になります。例6-5には、`#{strings.CONTACTS}` (`name`属性を変更します)など、後者の例が示されています。iOSネイティブ・フレームワークでは、デプロイメントで、その文の内容が、変換に使用される`*.string`ファイル内の適切なキーと必ず一致するようになっています。

エンド・ユーザーに表示される属性、またはエンド・ユーザーに表示されるコンテンツの場所を制御する属性のみが、国際化された文字列の使用をサポートしています。そこには次のような属性が含まれています。

- `<adfmf:application>`要素の`name`属性

- `<adfmf:feature>`要素の`name`属性

- `<adfmf:feature>`要素の`icon`属性

- `<adfmf:feature>`要素の`image`属性

- `<adfmf:content>`要素の`icon`属性

- `<adfmf:content>`要素の`image`属性

例6-5では、`name`、`icon`、`image`属性を持つアプリケーション機能が国際化文字列を使用しています。

例6-5 文字列を使用した国際化

    <adfmf:feature id="CTCS" name="#{strings.CONTACTS}"
                             icon="#{strings.CONTACTS_ICON}"
                             image="#{strings.CONTACTS_IMAGE}">
            <adfmf:constraints>
                <adfmf:constraint property="user.roles"
                                  operator="contains"
                                  value="employee" />
            </adfmf:constraints>
            <adfmf:description>The HTML Device Contacts</adfmf:description>
            <adfmf:loadBundle basename="mobile.adfmf-stringsBundle"
                              var="strings"/>
            <adfmf:content id="CTCS.Generic">
                <adfmf:constraints />
                <adfmf:localHTML url="contacts.html" />
            </adfmf:content>
      </adfmf:feature>

`<adfmf:loadBundle>`要素を定義するときに(例6-6を参照)、バンドル名と実際のバンドルとのマッピングを作成します。バンドル名は、式を評価するときに使用します。

例6-6 <adfmf:loadBundle>を使用したバンドル名のマッピング

       <adfmf:constraints>
          <adfmf:constraint property="user.roles"
                            operator="contains"
                            value="employee" />
       </adfmf:constraints>
            <adfmf:description>The HTML Device Contacts</adfmf:description>
            <adfmf:loadBundle basename="mobile.adfmf-featureBundle"
                              var="mobileBundle"/>
            <adfmf:loadBundle basename="mobile.adfmf-stringsBundle"
                              var="strings"/>

MAFのランタイムでは、JVMに最初にアクセスするまで、`<adfmf:loadBundle>`要素が保持されます。メッセージがJVMに送信され、パッケージのベース名からバンドルのEL名へのマッピングが初期化されます。例6-7は、JVMに送信されるメッセージの構造を示しています。

例6-7 ベース名からEL名へのマッピングを初期化するメッセージ

    {classname:"oracle.adfmf.framework.api.Model",method:"setBundles",
     params:[[{basename:"mobile.adfmf-featureBundle",elname:"mobileBundle"},
              {basename:"mobile.adfmf-stringsBundle",elname:"strings"}]]}