Oracle Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発 リリース2.1.3 E67371-01 |
|
![]() 前 |
![]() 次 |
この章では、MAFアプリケーション・エディタとMAF機能エディタを使用してモバイル・アプリケーションのSpringboardおよびナビゲーション・バーの表示動作を定義し、アプリケーション機能を埋め込むことでコンテンツを指定する方法について説明します。
この章の内容は次のとおりです。
ローカライゼーションは、テキストを変換し、ロケール固有のコンポーネントを追加することで、特定地域の言語または文化にアプリケーションを適応させるプロセスです。様々なロケールを使用するように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の詳細は、次を参照してください。
プロジェクト・レベルではリソース・バンドル・ファイルを作成します。このとき使用するリソース・バンドル・ダイアログにアクセスするには、MAF機能エディタまたはMAFアプリケーション・エディタを開き、「名前」フィールドの横にある外部化ボタンをクリックします。文字列の外部化ダイアログが開くので、このダイアログを使用して、表7-1および表7-2に示すmaf-application.xml
属性およびmaf-feature.xml
属性用のベース・リソース・バンドルにテキスト・リソースを自動的に作成することができます。
アプリケーション・レベルでは、MAFアプリケーション・エディタを使用してアプリケーション名やプリファレンス・ページのラベルなどの属性の文字列をローカライズできます。表7-1にこれらを示します。
表7-1 MAFアプリケーションのローカライズ可能な属性
要素 | 属性 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
プロジェクト(ビュー・コントローラ)レベルでは、MAF機能エディタを使用して、表7-2に示すアプリケーション機能関連の属性をローカライズできます。
表7-2 アプリケーション機能のローカライズ可能な属性
要素 | 属性 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
リソース・バンドルにローカライズ可能な文字列を作成するには:
MAF機能エディタで属性を選択し(図7-1
の「名前」など)、「外部化」をクリックします。これによって文字列の外部化ダイアログが開きます。
リストから既存のプロパティを選択し、「OK」をクリックします。
文字列の外部化ダイアログ(図7-2を参照)で、「新規プロパティの作成」をクリックして新しい文字列ソースを作成します。表示値、キー、説明を入力して、「OK」をクリックします。
注意: 既存の外部化された文字列を編集するには、既存のプロパティの一覧からいずれか1つを選択し、鉛筆のアイコンをクリックします。これによって外部化文字列の編集ダイアログが開きます(このダイアログでは文字列の値とその説明を変更できますが、キーは変更できません)。 |
「テキスト・リソースの選択」ダイアログでリソースを追加すると、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つのみ格納されています。アプリケーションをデプロイすると、リソース・バンドルはランタイムによって想定される言語フォーマットに変換されます。
<amx:commandButton>
のtext
属性のようなMAF AMXコンポーネントの属性には、リソース・バンドルを作成できます。表7-3に、これらのMAF AMX (amx
)コンポーネントを示します。
表7-3 MAF AMXコンポーネントのローカライズ可能な属性
コンポーネント | 属性 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MAF AMXコンポーネントの文字列を使用するには:
図7-3
のように<amx:selectOneButton>コンポーネントに定義されている値属性などの属性をAMXエディタで選択します。
右マウス・ボタンをクリックし、「ソース」→「文字列の外部化」を選択します。「文字列の外部化」ダイアログが表示されます(図7-4を参照)。
「文字列の外部化」ダイアログで、表示名、キーを入力することで文字列リソースを編集し、「終了」をクリックします。
次の例の<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"/>
イメージがテキストを格納していたり、特定の国または地域を反映している場合(たとえば旗のピクチャなど)、文字列の外部化に使用する同じXLIFFファイル・プロセスを介して、ローカライゼーション・プロセスの一環として代替イメージを指定できます。図7-5を参照してください。
イメージをハードコード化することはできません(例: 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式が自動的に作成されます。
XLIFFファイルまたはJavaクラス・ファイルを作成したら、ソース・エディタを使用して編集できます。MAFエディタのいずれかを使用する場合は、ファイル上でExternalizeコマンドを呼び出すことができます。
<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
ファイルのローカライズ可能な要素は、表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"}]]}