国際化対応コラボレーション とは、特定のロケールに合わせてカスタマイズできるように作成されているコラボレーションです。ロケール とは、ユーザーの環境において、エンド・ユーザーの特定の国、言語、または地域に固有のデータの処理方法に関する情報を提供する部分です。
ロケールは一般に、オペレーティング・システムの一部としてインストールされます。ロケール依存データを処理するコラボレーションを作成することを、コラボレーションの国際化対応 (I18N) といいます。
特定のロケールに従って国際化対応コラボレーションを処理することをコラボレーションのローカライズ (L10N) と呼びます。
このセクションでは、国際化対応コラボレーションに関する以下の情報について説明します。
ロケールは、ユーザー環境の以下の情報を提供します。
例えば、ASCII 文字コード・セットでは文字 「A」を 65 にエンコードし、EBCIDIC 文字セットでは文字「A」を 43 にエンコードします。文字コード・セット には、1 つ以上の言語記号のすべての文字のエンコード方式が含まれます。
ロケール名のフォーマットは次のとおりです。
ll_TT.codeset
ここで ll は 2 文字の言語コード (通常は小文字)、TT は 2 文字の国および地域コード (通常は大文字)、codeset は関連する文字コード・セットの名前を表します。多くの場合、名前の codeset 部分はオプションです。ロケールは一般に、オペレーティング・システムのインストールの一部としてインストールされます。
このセクションでは、コラボレーションを国際化対応にする際の設計上の考慮事項を以下のように分類して説明します。
コラボレーションを国際化対応にするには、そのコラボレーションがロケール依存コラボレーションとしてコーディングされている必要があります。つまり、コラボレーションがロケール設定を反映して振る舞い、ロケールに基づいて適切なタスクを実行する必要があります。例えば英語を使用するロケールの場合、コラボレーションはそのエラー・メッセージを英語のメッセージ・ファイルから取得する必要があります。
Process Designer Express により作成されるコラボレーション・コードは、国際化に対応していません。Process Designer Express によりコラボレーション・コードが生成されたら、このセクションに記載されている手順に従い、コラボレーション・テンプレートを国際化対応にしてください。
表 19に、国際化対応コラボレーションが従う必要のあるロケール依存設計の原則を示します。
設計の原則 | 詳細 |
---|---|
エラー・メッセージと状況メッセージのテキストはすべて、コラボレーション・テンプレートから分離してメッセージ・ファイルへ保管し、ロケールの言語へ翻訳します。 | テキスト・ストリング |
コラボレーションの実行時にビジネス・オブジェクトのロケールを保持します。 | ビジネス・オブジェクト・ロケール |
コラボレーション構成プロパティーは、マルチバイト文字を組み込むことができるように処理します。 | コラボレーション構成プロパティー |
その他のロケール固有タスクについて考慮します。 | その他のロケール依存タスク |
国際化対応コラボレーションのプログラミング時には、コラボレーション・コードにテキスト・ストリングをハードコーディングするのではなく、国際化対応コラボレーションがテキスト・ストリングを必要とするときに外部メッセージ・ファイルを参照するように設計してください。テキスト・メッセージを生成する必要があるときは、コラボレーションがメッセージ番号を使用してメッセージ・ファイルから適切なメッセージを取得します。すべてのメッセージを 1 つのメッセージ・ファイルにまとめたら、このファイルのテキストを適切な言語へ翻訳してファイルをローカライズします。
国際化対応メッセージ・ファイルの詳細については、メッセージ・ファイルの作成を参照してください。
ロギング操作、例外処理操作、E メール操作を国際化対応にするには、これらの各操作で、テキスト・メッセージの生成にメッセージ・ファイルが使用されていることを確認してください。メッセージ・ストリングをメッセージ・ファイルに記述し、各メッセージに固有の ID を割り当てます。表 20に、メッセージ・ファイルを使用する操作のタイプと、BaseCollaboration クラスの関連する Collaboration API メソッドを示します。これらのメソッドは、コラボレーション・テンプレートがメッセージ・ファイルからメッセージを取得するときに使用します。
表 20. メッセージ・ファイルからメッセージを取得するメソッド
メッセージ・ファイル操作 | BaseCollaboration メソッド |
---|---|
ロギング | logInfo()、logError()、logWarning() |
例外処理 | raiseException() |
E メール通知 | sendMail() |
ロギングと例外処理メッセージが常にコラボレーション・メッセージ・ファイルから取得されるようにするには、表 20 に示す形式のメソッドを使用しないでください。これらの形式を使用すると、呼び出し内で直接メッセージ・ストリングを指定できるようになります。例えばロギング宛先へエラーを記録するには、以下のように logError() を呼び出さないでください。
logError("Log this message to the log destination");
代わりにメッセージの固有 ID を作成し、コラボレーション・メッセージ・ファイルにテキストを挿入します。上記のメッセージに固有 ID として 712 が割り当てられている場合、メッセージ・ファイルのこのメッセージのエントリーは以下のようになります。
712 Log this message to the log destination.
必要に応じてこのメッセージへメッセージ・パラメーターを追加できます。
国際化対応コラボレーションでは、前述の logError() 呼び出しの代わりに、コラボレーション・メッセージ・ファイルからログ・メッセージを取得する以下の呼び出しを使用します。
logError(712);
同様に、例外メッセージはすべてコラボレーション・メッセージ・ファイルから取得します。そのために、raiseException() を以下の形式で使用することは避けてください。
void raiseException(String exceptionType, String message)
代わりに、メッセージ番号を指定する形式の raiseException() を 1 つ使用します。
sendEmail() メソッドを使用して、指定の E メール宛先へメッセージを送信できます。
国際化対応コラボレーションでは、E メール・メッセージはコラボレーション・メッセージ・ファイルにまとめられます。ただし sendEmail() メソッドにはメッセージの固有 ID を指定できる形式はありません。したがって、E メール・メッセージを送信するには、まずメッセージ・ファイルからメッセージを抽出し、次に sendEmail() を使用して、取得したメッセージ・ストリングを送信します。表 21 に、コラボレーションでメッセージ・ファイルからメッセージを取得するときに使用できるメソッドを示します。
表 21. メッセージ・ファイルからメッセージを取得するメソッド
コラボレーション・ライブラリー・クラス | BaseCollaboration メソッド |
---|---|
BaseCollaboration | getMessage() |
以下のコード・フラグメントでは、コラボレーション・メッセージ・ファイルからメッセージ 100 が取得され、E メール・メッセージに組み込まれます。
String retrievedMsg = getMessage(100); sendEmail(retrievedMsg, subjectLine, recipientList);
表 20 で説明したメッセージ・ファイル操作の処理に加え、国際化対応コラボレーション・テンプレートには各種のハードコーディングされたストリングが組み込まれていてはなりません。各種ストリングはテンプレートから分離してメッセージ・ファイルにまとめてください。
ハードコーディングされたストリングを国際化対応にする手順は、以下のとおりです。
例えばハードコーディングされたストリングに関する以下のコード行がコラボレーション・テンプレートにあるとします。
String imsg100 = "********Before entering order-to-ATP map********";
このハードコーディングされたストリングをコラボレーション・コードから分離するには、メッセージ・ファイルにメッセージを作成し、このメッセージに固有のメッセージ番号 (100) を割り当てます。
100 ********Before entering order-to-ATP map******** [EXPL] ATP Transaction: 162
コラボレーション・テンプレートで、ハードコーディングされたストリングを含むコードを、分離されたストリング (メッセージ 100) をメッセージ・ファイルから取得するコードに置き換えます。
String imsg100 = getMessage(100); //retrieve the message numbered ' 100' String imsg100 = getMessage(100); //display the retrieved message
メッセージ・ファイルの使用方法の詳細については、メッセージ・ファイルの作成を参照してください。
コラボレーション・オブジェクトの実行時には 2 つのロケール設定があります。
コラボレーション・ロケールにより、コラボレーションがロギング、トレース、例外処理、および E メールに使用するテキスト・メッセージのロケールが決まります。
フロー・ロケールにより、コラボレーション実行時に使用されるビジネス・オブジェクトのロケール設定が決まります。
作成されたビジネス・オブジェクトのデータには、常にロケールが関連付けられています。デフォルトでは、コラボレーションで作成されるすべてのビジネス・オブジェクトでコラボレーション・ロケールが使用されます。ただし、トリガー・ビジネス・オブジェクトのロケール (フロー・ロケール) がビジネス・オブジェクトに必要なことがよくあります。コラボレーション・ロケールはフロー・ロケールとは異なることがあるので、フロー・ロケールをビジネス・オブジェクトへ割り当てる必要があります。表 22 に、フローに関連付けられているロケールを取得するためにコラボレーションで使用できるメソッドを示します。
表 22. コラボレーションのフロー・ロケールを取得するメソッド
コラボレーション・ライブラリー・クラス | メソッド |
---|---|
BaseCollaboration | getLocale() |
コラボレーション・シナリオのフロー中にビジネス・オブジェクトのロケールが正しく維持され、適切に使用されるようにコラボレーション・テンプレートを構成する必要があります。コラボレーションからこのロケールへアクセスするときに使用されるメソッドを表 23 に示します。
表 23. ビジネス・オブジェクトのロケールへアクセスするメソッド
コラボレーション・ライブラリー・クラス | メソッド |
---|---|
BusObj | getLocale()、setLocale() |
Process Designer Express がコラボレーション・テンプレートの新しいポートを作成するときに、このポートの BusObj オブジェクトが新規に作成され、portNameBusObj という名前が指定されます (portName はポート名です)。例えば To という名前のポートを作成すると、Process Designer Express により以下のようなコードを持つ ToBusObj という名前の BusObj オブジェクトが作成されます。
BusObj ToBusObj = new BusObj("Item");
BusObj クラスのコンストラクターにより BusObj オブジェクトが作成され、そのロケールにはコラボレーション・ロケールが設定されます。ビジネス・オブジェクトのデータをフロー・ロケールに関連付ける必要がある場合には、コラボレーション・テンプレートによりビジネス・オブジェクトのロケールを変更する必要があります。
例えば図 24 で、2 つのポート To と From に対応する BusObj オブジェクトが Process Designer Express により作成されるとします。
図 24. ポート用のビジネス・オブジェクトを作成するためのコード
BusObj ToBusObj = new BusObj(triggeringBusObj.getType()); BusObj FromBusObj = new BusObj(triggeringBusObj.getType());
図 24 で生成されたコードを国際化対応にするコード・フラグメントを以下に示します。このコードでは、この新しい BusObj オブジェクトにフロー・ロケールを設定しています。
BusObj ToBusObj = new BusObj(triggeringBusObj.getType()); BusObj FromBusObj = new BusObj(triggeringBusObj.getType()); // get flow locale from BaseCollaboration triggerLocale = getLocale(); // set newly created BusObj objects' locale to flow locale ToBusObj.setLocale(triggerLocale); FromBusObj.setLocale(triggerLocale);
BusObj() コンストラクターは、ロケール名を引き数としてとります。したがって、別の方法として、フロー・ロケールをコンストラクター呼び出しに直接渡すように、図 24 で生成されたコードを以下のように書き直すこともできます。
// get flow locale from BaseCollaboration triggerLocale = getLocale(); BusObj ToBusObj = new BusObj(triggeringBusObj.getType(), triggerLocale); BusObj FromBusObj = new BusObj(triggeringBusObj.getType(), triggerLocale);
コラボレーション構成プロパティーの定義 (「プロパティー」タブ)で説明したように、コラボレーション・テンプレートでは 2 種類の構成プロパティーを使用してテンプレート実行をカスタマイズできます。
コラボレーション構成プロパティーの名前には、米国英語 (en_US) ロケールに関連付けられているコード・セットで定義されている文字のみ 使用してください。ただし、コラボレーション構成プロパティーの値には、コラボレーション・ロケールに関連付けられているコード・セットの文字を含めることができます。
コラボレーション・テンプレートは、BaseCollaboration クラスの getConfigProperty() メソッドまたは getConfigPropertyArray() メソッドを使用して構成プロパティーの値を取得します。これらのメソッドは、マルチバイト・コード・セットの文字を適切に処理します。ただし、コラボレーション・テンプレートを確実に国際化対応させるには、これらの構成プロパティー値を取得後、コラボレーション・テンプレートのコードによりこれらの値が正しく処理されなければなりません。コラボレーション・テンプレートでは、構成プロパティー値に 1 バイト文字だけが含まれていることを前提としないでください。
国際化対応コラボレーションは、以下のロケール依存タスクも処理する必要があります。
異なるコード・セットを使用する 2 つのロケーション間でデータが転送される場合、データを適切に保持するために何らかの文字変換を実行する必要があります。Java 仮想マシン (JVM) の Java ランタイム環境は、データを Unicode で表現します。Unicode 文字セットは、ほとんどの文字コード・セット (1 バイト文字およびマルチバイト文字) の文字のエンコードが含まれている汎用文字セットです。Unicode のエンコード形式は数種類あります。統合ビジネス・システムで最もよく使用されるエンコードを以下に示します。
UCS-2 エンコードは、2 バイト (オクテット) でエンコードされた Unicode 文字セットです。
UTF-8 エンコードは、UNIX 環境での Unicode 文字データを使用可能にする目的で設計されています。すべての ASCII コード値 (0...127) をサポートしているので、これらの値が ASCII コード以外として解釈されることはありません。各コード値は 1 バイト値、2 バイト値、または 3 バイト値として表現されます。
InterChange Server Express やそのコラボレーション・ランタイム環境など、WebSphere Business Integration Server Express システムのほとんどのコンポーネントは、Java で記述されています。したがって、WebSphere Business Integration Server Express 内のコラボレーションと他のコンポーネント間で転送されるデータは、Unicode コード・セットにエンコードされ、文字変換の必要はありません。