付録 B は、国際化された Solaris CDE アプリケーションを作成するソフトウェア開発者向けのガイドです。この付録では、OpenWindows と CDE の国際化の違いを示します。Solaris CDE アプリケーションを国際化するために実行しなければならない手順のうち、この付録で説明していないものは OpenWindows のガイドラインから変更されていません。CDE アプリケーションの国際化の詳細は、『共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)』を参照してください。
Solaris CDE は Solaris 7 がサポートするすべてのロケールをサポートします。
この付録は、Xt と Motif のプログラミングに精通している方を対象としています。
必ず環境変数 NLSPATH が正しく設定されているかどうかを確認してください。これにより、アプリケーションがメッセージカタログを見つけることが保証されます。
アプリケーションが DtInitialize() を呼び出す場合、NLSPATH はメッセージカタログを検索するため CDE のデフォルト位置に設定されます。デフォルト位置は、/<CDE_INSTALLATION>/lib/nls/msg/<locale>/<application>.cat です。たとえば、/usr/dt/lib/nls/msg/ja/dtcm.cat となります。
DtInitialize() はその他の変数を設定し、その他のタスクを実行します。この関数が必要かどうかは、対応するマニュアルページを参照してください。DtInitialize() は libDtSvc にあります。アプリケーションがまだこのライブラリにリンクされていない場合、NLSPATH を設定する目的だけで DtInitialize() を呼び出す必要はありません。
アプリケーションが DtInitialize() を呼び出さない場合、アプリケーションがメッセージカタログを検索できるように NLSPATH を設定しなければなりません。
デフォルト以外の場所にアプリケーションがメッセージファイルをインストールするか、その存在を想定している場合、ファイルの場所を NLSPATH に追加してください。
NLSPATH を完全にリセットした場合、他の CDE アプリケーションはメッセージカタログを検索できないことがあります。メッセージファイルの場所がデフォルトと異なる場合は、NLSPATH に追加するのがより安全な方法です。
他の XPG4 UNIX プラットフォームに移植できるようにするには、Solaris CDE アプリケーションは (gettext() などの代わりに)、catopen()、catclose()、catgets() ファミリの XPG4 メッセージ関数を使用しなければなりません。これらの関数の使用方法については、マニュアルページを参照してください。
また、アプリケーションを作成しようとするシステムがヘッダファイルで NL_CAT_LOCALE を定義していない場合は、アプリケーションで定義しなければなりません。これにより、アプリケーションを UNIX XPG4 準拠の他のプラットフォームに移植できることが保証されます。
どのロケールで実行中かアプリケーションで認識されるようにするには、次の関数を使用します。
この節では、文字列と XmString の間で変換する方法について説明します。
Motif では、明示的な呼び出しを行なって文字列をその内部表現である XmString に変換しなければなりません。アプリケーションを国際化する場合は、XmStringCreateLocalized() を使用して、この変換処理を実行します。
Solaris Motif では Motif 1.2.3 と違って、XmStringCreateLocalized() で ¥n が行セパレータとして認識されるので、1 つの文字列に複数行を使用できます。
XmString から文字列に変換するには、複合文字列を移動してセグメントごとに検索しなければなりません。この変換処理を実行するコード例については、『Motif プログラミング・マニュアル』(ソフトバンク発行) のボリューム 6A の第 19.3.3 節を参照してください。
XmString から文字列へ変換する場合は、XmStringGetLtoR() を使用しないでください。この関数は、テキストは左から右に向かうと見なします。
アプリケーションがリソースを使用する場合は、必ず app-defaults ファイルを組み込んでください。app-defaults ファイルの設定方法の詳細は、『X ツールキット・イントリンシクス・プログラミング・マニュアル』(ソフトバンク発行) のボリューム 4 の第 2.3.3 節を参照してください。
特定のロケール向けにカスタマイズしなければならない Motif リソースを app-defaults ファイルに入れて、そのリソースを現地仕様化します。次のリソースが含まれますが、これ以外にもあります。
XmNmnemonic
XmNfontList
XmNcolumns
XmNinputMethod
XmNpreeditType
どの SVR4 UNIX プラットフォームにも、gencat ユーティリティが含まれています。変換後のメッセージカタログファイルで gencat を実行して、バイナリ形式のメッセージカタログを生成します。生成後のファイルは、フォーマットされたメッセージデータベースとなります。
各プラットフォームには、gencat が固有に実装されています。各メッセージカタログのフォーマットが原因となって異なる gencat ユーティリティが破損しないかどうかを、次のメッセージカタログ規則に従って確認してください。
スペースが後ろに付いている場合は、$quote 宣言を使用します (gencat(1) のマニュアルページを参照してください)。
メッセージ ID とメッセージ文字列の間には複数のスペースを入れないでください。
$ とコメントの間にはスペースを 1 個挿入します。
メッセージ ID を昇順でソートする必要があります。
.msg ファイルは、アプリケーションコードに表示される変換可能テキストが入ったメッセージカタログです。これは、翻訳者に渡す翻訳用のファイルです。その形式については、gencat(1) のマニュアルページを参照してください。gencat を使用して、変換後のメッセージカタログをメッセージデータベースにします。
.cat ファイルは、.msg ファイル上で gencat を実行した結果生成されるメッセージカタログです。これはバイナリファイルです。
OpenWindows 環境では、アプリケーションのロケールに応じてフォントの別名が異なります。Solaris CDE では、フォント別名はロケールに依存しません。CDE フォント名の詳細は、『共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)』または『Solaris 共通デスクトップ環境 プログラマーズ・ガイド』を参照してください。
dtdspmsg ユーティリティはシェルスクリプトの国際化に役立ちます。dtdspmsg コマンドは、メッセージカタログから、選択したメッセージを表示します。詳細は、dtdspmsg(1x) のマニュアルページを参照してください。