プライマリ・コンテンツに移動

Oracle Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発 リリース2.1.3 E67371-01 |
| 目次

前 | 次 |

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

この章では、MAFアプリケーション・エディタとMAF機能エディタを使用してモバイル・アプリケーションのSpringboardおよびナビゲーション・バーの表示動作を定義し、アプリケーション機能を埋め込むことでコンテンツを指定する方法について説明します。

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

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

- 第7.2項「リソース・バンドルでの文字列の入力方法」

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

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

- 第7.5項「MAF AMXコンポーネントのプロジェクト・レベルのリソース・バンドルを作成する場合の処理」

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

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

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

- 第7.9項「iOSアプリケーションの国際化」

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

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

OEPEでは、これらのテキスト・リソースの28言語への自動変換がサポートされます。OEPEでは、ロケール固有のリソースを提供する抽象クラス`java.util.ResourceBundle`を使用してMAFコンポーネントのローカライズをサポートします。ローカライゼーションのサポートはOEPEのMAF実装に組み込まれていますが、デザインタイム・エディタでは自動的にはサポートされません。ローカライゼーション用のテキスト文字列を手動で入力できます。

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

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

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

## 7.2 リソース・バンドルでの文字列の入力方法

プロジェクト・レベルではリソース・バンドル・ファイルを作成します。このとき使用するリソース・バンドル・ダイアログにアクセスするには、MAF機能エディタまたはMAFアプリケーション・エディタを開き、「名前」フィールドの横にある外部化ボタンをクリックします。文字列の外部化ダイアログが開くので、このダイアログを使用して、表7-1および表7-2に示す`maf-application.xml`属性および`maf-feature.xml`属性用のベース・リソース・バンドルにテキスト・リソースを自動的に作成することができます。

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

表7-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`

プロジェクト(ビュー・コントローラ)レベルでは、MAF機能エディタを使用して、表7-2に示すアプリケーション機能関連の属性をローカライズできます。

表7-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. MAF機能エディタで属性を選択し(`図7-1`の「名前」など)、「外部化」をクリックします。これによって文字列の外部化ダイアログが開きます。

2. リストから既存のプロパティを選択し、「OK」をクリックします。

   図7-1 外部化文字列の編集ダイアログの選択

3. 文字列の外部化ダイアログ(図7-2を参照)で、「新規プロパティの作成」をクリックして新しい文字列ソースを作成します。表示値、キー、説明を入力して、「OK」をクリックします。

   図7-2 外部化文字列の編集ダイアログの選択

   注意: 既存の外部化された文字列を編集するには、既存のプロパティの一覧からいずれか1つを選択し、鉛筆のアイコンをクリックします。これによって外部化文字列の編集ダイアログが開きます(このダイアログでは文字列の値とその説明を変更できますが、キーは変更できません)。

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

「テキスト・リソースの選択」ダイアログでリソースを追加すると、Oracle Enterprise Pack for Eclipseによって、指定した表示名の文字列とキー・ファイルをADF Meta-INFファイルに格納した、新しいプロジェクト・リソース・バンドルが作成されます(`mafapplication.xliff`を参照)。

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

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

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

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

## 7.4 MAF AMXコンポーネントの文字列のローカライズ方法

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

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

コンポーネント | 属性
--- | ---
`<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コンポーネントの文字列を使用するには:

1. `図7-3`のように<amx:selectOneButton>コンポーネントに定義されている値属性などの属性をAMXエディタで選択します。

   図7-3 プロパティによる文字列の外部化

2. 右マウス・ボタンをクリックし、「ソース」→「文字列の外部化」を選択します。「文字列の外部化」ダイアログが表示されます(図7-4を参照)。

3. 「文字列の外部化」ダイアログで、表示名、キーを入力することで文字列リソースを編集し、「終了」をクリックします。

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

## 7.5 MAF AMXコンポーネントのプロジェクト・レベルのリソース・バンドルを作成する場合の処理

次の例の`<amx:outputText>`コンポーネントの`value`属性のように、コンポーネントをローカライズすると、Oracle Enterprise Pack for Eclipseによって文字列がEL式に変換されます(`#{viewControllerBundle.NewPage_header}`など)。

    <amx:facet name="header">
          <amx:outputText value="#{viewControllerBundle.NewPage_header}"
           id="ot1" />
        </amx:facet>

さらに、次の`ViewControllerBundle.xlf`のように、Oracle Enterprise Pack for Eclipseはプロジェクトのデフォルト・パッケージの下にリソース・バンドルを作成します。生成された`<amx:loadBundle>`コンポーネントでは、`basename`はこのパッケージを表しています。

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

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

イメージがテキストを格納していたり、特定の国または地域を反映している場合(たとえば旗のピクチャなど)、文字列の外部化に使用する同じXLIFFファイル・プロセスを介して、ローカライゼーション・プロセスの一環として代替イメージを指定できます。図7-5を参照してください。

図7-5 XLIFFファイルでのイメージの外部化

イメージをハードコード化することはできません(例: `icon="/feature1/test.png"`)。そのかわり、次に示すようにイメージのパスの`<trans-unit>`要素を追加することで、`ViewControllerBundle.xlf`ファイルを手動で編集する必要があります。

    <amx:image id="i1" source="#{viewControllerBundle.NewPage_icon2JPG}"
     shortDesc="#{viewControllerBundle.NewPage_myFavoriteImage}" />
             <trans-unit id="NewPage_icon2JPG">
                 <source>/icon2.JPG</source>
                 <target/>
             </trans-unit>
             <trans-unit id="NewPage_myFavoriteImage">
                 <source>My Favorite Image</source>
                 <target/>
             </trans-unit>
    <trans-unit id="IMAGEPATH">
         <source>/feature1/test.jpg</source>
         <target/>
    </trans-unit>

注意: 前述の`<source>`要素で定義されているイメージの場所は、`ViewController\public_html`のアプリケーション機能ファイルの場所を基準にした相対的な場所です。または、イメージ・ファイルの名前を入力することもできます(例: `<source>test.png</source>`)。

`ViewControllerBundle.xlf`を更新すると、Oracle Enterprise Pack for Eclipseによって`icon`属性のソース属性のEL式が自動的に作成されます。

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

XLIFFファイルまたはJavaクラス・ファイルを作成したら、ソース・エディタを使用して編集できます。MAFエディタのいずれかを使用する場合は、ファイル上でExternalizeコマンドを呼び出すことができます。

## 7.8 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`

## 7.9 iOSアプリケーションの国際化

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

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

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

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

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

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

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

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

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

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

    <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>`要素を定義するときに、バンドル名と実際のバンドルとのマッピングを作成します。バンドル名は、式を評価するときに使用します。

       <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名へのマッピングが初期化されます。次の例は、JVMに送信されるメッセージの構造を示しています。

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