Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.1.0 E60836-01 |
|
![]() 前 |
![]() 次 |
この章では、MAFアプリケーションを様々なロケールおよび国際的なユーザー環境で使用されるように構成する方法について説明します。JDeveloperで自動的にリソース・バンドルを作成する機能、リソース・バンドルおよびロケールを手動で定義する方法およびアプリケーションのローカリゼーション・プロパティの構成方法などの機能についても説明します。
この章の内容は次のとおりです。
ローカライゼーションは、テキストを変換し、ロケール固有のコンポーネントを追加することで、特定地域の言語または文化にアプリケーションを適応させるプロセスです。様々なロケールを使用するように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の詳細は、次を参照してください。
プロジェクトの「リソース・バンドル」設定ページを使用して、ビュー・コントローラ・プロジェクトおよびアプリケーション・コントローラ・プロジェクトのリソース・バンドルを作成できます(図6-1を参照)。
プロジェクトのリソース・バンドル・オプションを設定するには:
「アプリケーション」ウィンドウで、プロジェクトをダブルクリックします。
「プロジェクト・プロパティ」ダイアログで、「リソース・バンドル」を選択します。
自動的にデフォルトのリソース・ファイルを生成するには、「バンドルの自動同期化」を選択します。
次に示すいずれかのリソース・バンドル・ファイル・オプションを選択します。
1プロジェクト当たり1バンドル: <ProjectName>.xlf
という名前のファイルに構成されます。詳細は、第6.3項「リソース・バンドル・オプションの選択時に行われる処理」を参照してください。
1ファイル当たり1バンドル: リソースをファイル(maf-feature.xml
、maf-application.xml
または「MAF AMXページ」)に格納するたびに新しいバンドルが作成されます。このため、各ファイルには独自のバンドルがあります。このオプションによりリソース・バンドルの数が各ファイル1つに制限されるため、このオプションを選択した場合、JDeveloperでは2つ目のバンドルを作成できません。
「OK」をクリックします。
注意: Xliffリソース・バンドルは、MAFで使用される唯一のリソース・バンドルの形式です。このページの詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。 |
JDeveloperでは、図6-1に示すように、「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで行った選択に基づいて、特定のタイプの1つ以上のリソース・バンドルが生成されます。図6-3で示す「テキスト・リソースの選択」ダイアログを初めて呼び出したときに、リソース・バンドルが生成されます。
「1プロジェクト当たり1バンドル」を選択し、「リソース・バンドル・タイプ」
ドロップダウン・リストから、「リスト・リソース・バンドル」値を選択したとします。初めて「テキスト・リソースの選択」ダイアログを呼び出すと、JDeveloperではそのプロジェクト用に1つのリソース・バンドルが生成されます。
デフォルトでは、JDeveloperにより、プロジェクトの「アプリケーション・ソース」ディレクトリの「view」サブディレクトリに、生成されたリソース・バンドルが作成されます。
プロジェクト・レベルでは、「リソース・バンドル」ダイアログを使用してリソース・バンドル・ファイルを作成します。このダイアログには、「プロパティ」ウィンドウで「テキスト・リソースの選択」をクリックすることでアクセスします。このダイアログでは、表6-1
および表6-2
に示すmaf-application.xml属性およびmaf-feature.xml属性のベース・リソース・バンドルに、テキスト・リソースを自動的に作成できます。
アプリケーション・レベルでは、アプリケーション名やプリファレンス・ページのラベルなどの属性の文字列をローカライズできます。表6-1にこれらを示します。
表6-1 MAFアプリケーションのローカライズ可能な属性
要素 | 属性 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
プロジェクト(ビュー・コントローラ)レベルでは、表6-2に示すような、アプリケーション機能関連の属性をローカライズできます。
表6-2 アプリケーション機能のローカライズ可能な属性
要素 | 属性 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
リソース・バンドルにローカライズ可能な文字列を作成するには:
「テキスト・リソースの選択」ダイアログでリソースを追加すると、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つのみ格納されています。アプリケーションをデプロイすると、リソース・バンドルはランタイムによって想定される言語フォーマットに変換されます。
ボタン・コンポーネント(<amx:commandButton>
)のtext
属性のようなMAF AMX UIコンポーネントの属性には、リソース・バンドルを作成できます。表6-3に、これらのMAF AMX UIコンポーネントを示します。
表6-3 MAF AMX UIコンポーネントのローカライズ可能な属性
コンポーネント | 属性 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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を参照)。
イメージがテキストを格納していたり、特定の国または地域を反映している場合(たとえば旗のピクチャなど)、ローカライゼーション・プロセスの一環として代替イメージを指定できます。イメージをハードコード化することはできません(例: 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を参照)。
XLIFFファイルを作成した後で、ソース・エディタを使用してこのファイルを編集できます。
リソース・バンドル・ファイルを編集するには:
メイン・メニューから「アプリケーション」→「リソース・バンドルの編集」を選択します。
「リソース・バンドルの編集」ダイアログ(図6-7を参照)で、「リソース・バンドル」ドロップダウン・リストから編集するリソース・バンドル・ファイルを選択するか、編集するリソース・バンドル・ファイルが「リソース・バンドル」ドロップダウン・リストに表示されない場合は、「検索」アイコンをクリックして「リソース・バンドルの選択」ダイアログを起動します。
「リソース・バンドルの選択」ダイアログで、「ファイル・タイプ」ドロップダウン・リストからファイル・タイプを選択します。編集するリソース・バンドルに移動します。「OK」をクリックします。
「リソース・バンドルの編集」ダイアログで、図6-7に示すように、「追加」アイコンをクリックしてキーと値のペアを追加します。完了したら「OK」をクリックします。
<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
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に送信されるメッセージの構造を示しています。