プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Event Processingアプリケーションの開発
12c リリース1 (12.1.3)
E54312-04
目次へ移動
目次

前
前へ
次
次へ

12 インターナショナライゼーション

メッセージ・カタログを使用して、サーバー・ログに送信されるメッセージ・テキストまたはユーザーに対して表示されるメッセージ・テキストをインターナショナライズできます。これらのメッセージは、どのユーザーが特定のアプリケーション・コンポーネントやエラー条件を呼び出したかなど、アプリケーション内で発生した事象に関する情報を提供したり、アプリケーションをリリースする前にデバッグする上で役立ちます。

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

12.1 メッセージ・カタログ

メッセージ・カタログは、メッセージのコレクションが格納される単一のXMLファイルです。各メッセージには、一意のIDが付けられます。インターナショナライズするテキストはすべて、メッセージ・カタログで定義および具体化されます。各メッセージ・カタログでは、ログ・メッセージまたはシンプル・テキストのコレクションが定義されます。

メッセージ・カタログを使用すると、アプリケーション・コードを変更または再コンパイルせずにメッセージ文字列を複数のロケールに変換できます。

メッセージIDは、すべてのログ・メッセージまたはロケール・メッセージ・カタログを通じて一意です。メッセージ・カタログ・ファイル内で、各メッセージのローカライズされたバージョンには、エラーを特定する一意のメッセージIDとメッセージ・テキストが割り当てられます。原則的に、メッセージは、サポート担当者が簡単に見つけられるように、システム内の1つの場所からログに記録します。シンプル・テキスト・カタログのメッセージIDは、各シンプル・テキスト・カタログ内で一意です。

メッセージ・カタログには、次の3つのタイプがあります。

  • ログ・メッセージ・カタログ: アプリケーションでサーバー・ログに記録される情報メッセージまたはエラー・メッセージ。

  • シンプル・テキスト・メッセージ・カタログ: ユーザーに対して表示されるシンプル・メッセージ。

  • ロケール・メッセージ・カタログ: 英語版のメッセージが含まれる最上位のログ・メッセージ・カタログまたはシンプル・テキスト・カタログに対応する、ロケール固有のメッセージのコレクション。対応するロケール固有のカタログがあり、追加してサポートされるロケールごとに1つのカタログが付加されます。

    最上位の英語版カタログには、メッセージの定義に必要な情報がすべてあります。ロケール固有のカタログには、メッセージID、変更された日付、および特定ロケールに対応するメッセージの変換だけが含まれます。

独自のログ・メッセージまたはシンプル・テキスト・メッセージのカタログを作成し、Oracle WebLogicユーティリティを使用して、ロギング・メソッドを持つJavaクラスを生成できます。Javaクラスをアプリケーション・コードにインポートし、ロギング・メソッドにランタイム値を提供するようアプリケーション・コードを実装します。ロギング・メソッドによって生成されたログ・メッセージは、Oracle Event Processingサーバーによって生成されたログ・メッセージと同じ方法で統合および処理されます。

メッセージ・カタログ・ファイルは次のXMLドキュメント・タイプ定義(DTD)ファイルのいずれかで定義されます。

  • msgcat.dtd: 最上位のデフォルト・カタログの構文を記述します。

  • l10n_msgcat.dtd: ロケール固有のカタログの構文を記述します。

DTDは、/Oracle/Middleware/wlevserver/modules/ com.bea.core.i18n.generator_VERSION.jarに格納されます。VERSIONは特定のバージョンを表し、これは変更されます。

ロギングのすべての要件に対応するログ・メッセージ・カタログを1つ作成したり、サブシステムまたはJavaパッケージに基づいて細かく分けてカタログを作成することもできます。表示するときにそのログの特定の部分に焦点を当てることができるよう、複数のサブシステム・カタログの使用をお薦めします。シンプル・テキストのカタログの場合は、インターナショナライズされるユーティリティごとに1つのカタログを作成することをお薦めします。

12.1.1 階層

すべてのメッセージは、デフォルトの最上位カタログで定義する必要があります。基本カタログの様々なローカライゼーションを提供するカタログは、ロケールに基づいた名前が付けられたmsgcatのサブディレクトリ(ドイツ語の場合はmsgcat/deなど)に定義されています。たとえば、mycat.xmlという最上位カタログと..de/mycat.xmlというそのドイツ語版のカタログがあります。通常、最上位カタログは英語です。ただし、どのカタログでも英語は必須ではありません。

java.util.Localeのドキュメントで定義されているように、ロケールの指定(deなど)にも階層があります。ロケールでは言語、国、およびバリアントを指定できます。言語は、ロケール指定でもっとも一般的なものです。言語は国コードによって拡張できます。たとえば、en\USはアメリカ英語を示します。これに関連付けられたカタログの名前は、..en\US\mycat.xmlとなります。バリアントはベンダーまたはブラウザに固有であり、言語または国で定義された複数のロケールの間で細かな違い(照合順序など)を持たせるために使用します。

12.1.2 名前付け

メッセージ・カタログ・ファイルの名前(.xml拡張子を除く)は、実行時クラスおよびプロパティ名の生成に使用されるため、命名は慎重に行ってください。メッセージ・カタログに名前を付ける場合、次のガイドラインに従ってください。

  • メッセージ・カタログを作成しているターゲット・パッケージ内の既存クラスの名前と競合するようなメッセージ・カタログ名は避けます。

  • クラス名に使用できる文字のみが含まれるメッセージ・カタログ名を使用します。

  • クラス名の命名規則に従います。

たとえば、カタログの名前がXyz.xmlの場合、生成されるクラス名はXyzLogLocalizerおよびXyzLoggerになります。

以下の考慮事項も、メッセージ・カタログ・ファイルに適用されます。

  • ログ・メッセージIDは、通常は先頭に0が付く6文字の文字列です。一部のインタフェースでは、整数表現もサポートされています。

  • シンプル・テキスト・カタログのメッセージIDは、任意の文字列値で構成できます。

  • Javaでは、パッケージと呼ばれるコレクションにクラスをまとめることができます。パッケージ名は、特定のカタログが存在するサブシステムの名前と一致させることをお薦めします。命名が一環していると、OSGiインポートの定義が容易になります。

  • ログのLocalizerクラスは、実際にはResourceBundleプロパティ・ファイルです。

12.1.3 メッセージ引数

ログ・メッセージのメッセージ本文、メッセージ詳細、原因、およびアクションなどのセクションには、java.text.MessageFormatに記載されているようなメッセージ引数を組み込むことができます。メッセージ・コンテンツがjava.text.MessageFormatによって定義されているパターンに準拠していることを確認してください。

引数は、実行時に動的に設定される値を表します。これらの値はルーチン(メッセージを出力するためのルーチンなど)に渡されます。1つのメッセージには0 - 9で番号付けされた10個までの引数をサポートできます。メッセージ本文にはすべての引数を入れる必要がありますが、メッセージ定義(メッセージ本文、メッセージ詳細、妥当な原因)の任意のテキスト・セクションにもこれらの引数の任意のサブセットを入れることができます。

  • シンプル・テキスト・メッセージでは、引数を入れられるのは、メッセージ本文のセクションに限られます。

  • また、ログ・メッセージでは重大度レベルを割り当てる必要があります。ログ・メッセージはmethod属性で定義されているとおり、生成済のLoggerメソッドによって生成されます。

メッセージ引数は開発時にメッセージ定義に挿入され、実行時においてメッセージがログに記録されるときに適切なメッセージ・コンテンツに置き換えられます。

  • 引数はString型であるか、String型として表現可能です。

  • 数値データは{n,number}として表されます。

  • 日付は{n,date}としてサポートされます。

次に、XMLログ・メッセージ定義の抜粋で、メッセージ引数の使用方法を示します。引数の番号は、method属性で指定された引数の1つと対応している必要があります。具体的には、{0}は最初の引数と、{1}は2番目の引数と対応している必要があります。次の例では、{0}は開けないファイルを表し、{1}は適切に開かれるファイルを表します。

<messagebody>Unable to open file, {0}. Opening {1}. All arguments must be in body.</messagebody>

    <messagedetail> File, {0} does not exist. The server will restore the file
    contents from {1}, resulting in the use of default values for all future
    requests. </messagedetail>

    <cause>The file was deleted</cause>

    <action>If this error repeats then investigate unauthorized access to the
    file system.</action>

次に、 method 属性の例を示します。

-method="logNoFile(String name, String path)"

このメッセージの例では、2つの引数{0}および{1}が使用されています。

  • 両方とも<messagebody>で使用されています。

  • 両方とも<messagedetail>で使用されています。

  • どちらも<cause>または<action>では使用されていません。

12.1.4 フォーマット

最上位のカタログ・ファイルとロケール固有のカタログ・ファイルでは、カタログのフォーマットが異なります。最上位のカタログでは、ベース・ロケールのテキスト・メッセージが定義されます。ロケール固有のカタログは、最上位バージョンで定義されているテキストの翻訳のみを備えています。さらに、ログ・メッセージ・カタログではシンプル・テキスト・カタログと定義の方法が異なります。

ログ・メッセージ・カタログ

この例は、messagebodymessagedetailcause、およびactionの各要素の使用方法を示すために1つのログ・メッセージを持つMyUtilLog.xmlメッセージ・カタログを示します。

<?xml version="1.0"?>
<!DOCTYPE message_catalog PUBLIC "weblogic-message-catalog-dtd" 
"http://www.bea.com/servers/wls90/dtd/msgcat.dtd">
<message_catalog 
  l10n_package="programs.utils"
  i18n_package="programs.utils"
  subsystem="MYUTIL"
  version="1.0"
  baseid="600000"
  endid="600100"
  <log_message
    messageid="600001"
    severity="warning"
    method="logNoAuthorization(String arg0, java.util.Date arg1,int arg2)"
    <messagebody>
      Could not open file, {0} on {1,date} after {2,number} attempts.
    </messagebody>
    <messagedetail>
      The configuration for this application will be defaulted to
      factory settings. Custom configuration information resides
      in file, {0}, created on {1,date}, but is not readable.
    </messagedetail>
    <cause>
      The user is not authorized to use custom configurations. Custom
     configuration information resides in file, {0}, created on
     {1,date}, but is not readable.The attempt has been logged to
    </cause>
     the security log.
    <action>
      The user needs to gain approriate authorization or learn to
      live with the default settings.
    </action>
  </log_message>
</message_catalog>

シンプル・テキスト・カタログ

この例は、1つのテキストが定義されているMyUtilLabels.xmlテキスト・カタログを示します。

<?xml version="1.0"?> 
<!DOCTYPE message_catalog PUBLIC "weblogic-message-catalog-dtd"
    "http://www.bea.com/servers/wls90/dtd/msgcat.dtd"> 
<message_catalog>
  l10n_package="programs.utils"
  i18n_package="programs.utils"
  subsystem="MYUTIL"
  version="1.0"
  <message>
    messageid="FileMenuTitle"
    <messagebody>
      File
    </messagebody>
  </message>
</message_catalog>

ロケール固有のカタログ

この例は、..\msgcat\fr\MyUtilLabels.xmlファイルにあるメッセージのフランス語版です。

<?xml version="1.0"?>
<!DOCTYPE message_catalog PUBLIC 
   "weblogic-locale-message-catalog-dtd"
   "http://www.bea.com/servers/wls90/dtd/l10n_msgcat.dtd">
<locale_message_catalog 
  l10n_package="programs.utils"
  subsystem="MYUTIL" 
  version="1.0">
  <message>
    <messageid="FileMenuTitle">
    <messagebody> Fichier </messagebody>
  </message>
</locale_message_catalog>

messagebodymessagedetailcause、およびactionの各要素でテキストを入力するときには、有効なUTF-8 (Unicode Transformation Format-8)文字を生成するツールを使用するとともに、適切なキーボードのマッピングをインストールしておきます。UTF-8は、ASCII文字のエンコーディングを最適化する、効率的なUnicode文字列エンコーディング方式です。メッセージ・カタログでは常にUTF-8エンコーディング方式が使用されます。

12.1.5 メッセージ・カタログのローカライゼーション

カタログ・サブディレクトリの名前は、小文字2文字のISO 639言語コード(日本語はja、フランス語はfrなど)に基づいて付けられます。サポートされている言語コードは、java.util.Locale Javadocで確認できます。

言語コードのバリエーションは、言語コードの下位にある大文字2文字のISO 3166国コードとバリアントを使用して実現できます。一般的な構文は、lang\country\variantです。

たとえば、zhは中国の言語コードです。CNは簡体字中国語の国コードで、TWは繁体字中国語の国コードです。このため、zh\CNおよびzh\TWは中国語の異なる2つのロケールです。

バリアントは、特定のロケールを扱うプラットフォーム・ベンダーの機能に違いがある場合に役立ちます。ベンダー・バリアントには、WINMACPOSIXなどがあります。ロケールをさらに修飾するために2つのバリアントが使用される場合もあります。この場合、バリアントはアンダースコアで区切ります(Traditional_MacModern_MACなど)。

注:

言語、国、およびバリアントは、すべて大文字/小文字が区別されます。

完全修飾ロケールはzh\TW\WINのようになり、Win32プラットフォームでの繁体字中国語を識別します。前述のロケールをサポートするメッセージ・カタログには、次のファイルが含まれます。

  • \*.xml - デフォルト・カタログ

  • \zh\*.xml - 中国語ローカライゼーション

  • \zh\TW\*.xml - 繁体字中国語ローカライゼーション

  • \zh\TW\WIN\*.xml - Win32コード・セットに対する繁体字中国語ローカライゼーション

特定のローカライゼーションは、親ローカライゼーションで定義されたすべてのメッセージに対応する必要はありません。

12.2 ローカライゼーション・クラスの生成

メッセージ・カタログのXMLファイルを作成した後、weblogic.i18ngenユーティリティを使用して、ログ・メッセージ内のテキストをローカライズするLoggerおよびTextFormatterクラスを作成します。weblogic.i18ngenユーティリティにより、メッセージIDのルックアップ・ハッシュ表weblogic.i18n.L10nLookupをロードするi18n_user.propertiesプロパティ・ファイルが作成または更新されます。

エラーや警告などのメッセージはすべてstderrに送信されます。

ユーザー・カタログが認識されるように、i18n_user.propertiesファイルはOracle Event Processingサーバー・クラス・パスで識別されたディレクトリに置く必要があります。i18n_user.propertiesファイルは、Oracle Event Processingサーバー・クラス・パスに置くことをお薦めします。i18n_user.propertiesファイルがtargetdirectoryにある場合は、targetdirectoryOracle Event Processingサーバー・クラス・パスにある必要があります。

LoggerおよびTextFormatterクラスを生成するためのメッセージ・カタログの解析

次の手順は、Oracle Event Processingサーバーで使用する、インターナショナライズされたメッセージを作成する方法を示します。

  1. カタログ内のメッセージを定義して、最上位のログ・メッセージ・カタログまたはシンプル・テキスト・メッセージ・カタログを作成、または編集します。

    メッセージ・テキストだけでなく、メッセージが格納するランタイム値の型と配置に関する情報も含みます。

  2. weblogic.i18ngenを実行して、手順1で作成または編集したカタログを検証し、LoggerおよびTextFormatterクラスを生成します。

    java weblogic.i18ngen [options] [filelist]
    

    生成されたクラスには、各メッセージで使用するメソッドが組み込まれています。このクラスは、メッセージ・カタログ・エントリで指定されたデータに従って定義されます。クラスには、カタログのタイプによって、メッセージ・テキストをロギングまたは取得するメソッドが組み込まれます。クラス名の末尾には、LoggerまたはTextFormatterが付きます。詳細は、「weblogic.i18ngenユーティリティ」を参照してください。

    表12-1 weblogic.i18ngenユーティリティ・オプション

    オプション 説明

    -build

    必要なすべてのファイルを生成し、コンパイルします。-i18n-l10n-keepgeneratedおよび-compileオプションを兼ね備えています。

    -d targetdirectory

    生成されたJavaソース・ファイルのルート・ディレクトリを指定します。ユーザー・カタログ・プロパティは、targetdirectoryの相対パスにあるi18n_user.propertiesに配置されます。ファイルは、メッセージ・カタログのi18n_package値およびl10n_package値に基づいて適切なディレクトリに配置されます。デフォルトのターゲット・ディレクトリは現在のディレクトリであり、必要に応じて作成されます。

    この引数が省略された場合は、メッセージ・カタログに指定されたクラス階層に関係なく、すべてのクラスがカレント・ディレクトリに生成されます。

    -n

    解析し、有効性を検証しますが、クラスは生成しません。

    -keepgenerated

    生成されたJavaソース(クラス・ファイルと同じディレクトリに存在)を保持します。

    -ignore

    エラーを無視します。

    -i18n

    インターナショナライザ(LoggersTextFormattersなど)を生成します。

    -l10n

    Localizer (LogLocalizers 、TextLocalizersなど)を生成します。

    -compile

    現在のCLASSPATHを使用して生成されたJavaファイルをコンパイルします。生成されたクラスは、 -d オプションで識別されるディレクトリに配置されます。生成されたクラスは、ソースと同じディレクトリに配置されます。

    通常は、コンパイルの途中でエラーが検出されると、クラス・ファイルやプロパティ・ファイルが作成されません。 i18ngen は異常な終了ステータスで終了します。

    -nobuild

    解析と有効性の検証のみを実行します。

    -debug

    デバッグ・モード。

    -dates

    weblogic.i18ngenに、カタログ内のメッセージ・タイムスタンプを更新させます。カタログが書込み可能でタイムスタンプが更新された場合、カタログは上書きされます。

    filelist

    このファイル・リストのファイルとディレクトリを処理します。ディレクトリが指定されている場合は、そのディレクトリのすべてのXMLファイルが処理されます。すべてのファイルの名前には、XMLの接尾辞が付いている必要があります。すべてのファイルはmsgcat.dtd構文に準拠している必要があります。weblogic.i18ngenは、実際に生成されたファイルに対して、完全修飾名リスト(Javaソース)をstdoutログに出力します。

  3. 手順1で作成したメッセージ・カタログ用に、必要に応じてロケール固有カタログを作成します。

  4. weblogic.l10ngenを実行して、手順3で作成したロケール固有のカタログを処理します。

  5. 手順2で生成したLoggerまたはTextFormatterクラスを使用できるようにアプリケーションをコーディングします。

    アプリケーションのMANIFEST.MFファイル内のOSGiインポート文を使用して、次のパッケージをOracle Event Processingアプリケーションにインポートします。

    weblogic.i18n.logging weblogic.logging

    アプリケーションがLoggerまたはTextFormatterメソッドの1つを呼び出してメッセージをログに記録するか戻すと、メッセージ・テキストのローカライズ・バージョンがターゲット・ロケーションに書き込まれます。Loggerメソッドはローカライズされたログ・ファイルにメッセージのローカライズ・バージョンを書き込み、TextFormatterメソッドはメッセージのローカライズ・バージョンをディスプレイに書き込みます。

  6. i18n_user.propertiesファイルがOracle Event Processingサーバー・クラス・パスにあることを確認します。

    weblogic.i18ngenユーティリティにより、メッセージIDのルックアップ・ハッシュ表weblogic.i18n.L10nLookupをロードするi18n_user.propertiesファイルが生成されます。