共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

ローカライズされたリソース

この節では、どのウィジェットおよびガジェット・リソース内容がロケールに依存するかを説明します。情報は関連機能別に構成されています。たとえば、最初のセクションでは、ラベルを表示したりプッシュ・ボタン機能を提供するのに使用されるウィジェットのためのロケールを区別するリソースを説明します。

ラベルおよびボタン

表 2-3 に、ラベルとして使用されるローカライズできるリソースを示します。多くは XmString 型です。その他の型は color か char* です。これらのリソースの詳しい説明は、『Motif 1.2 Reference Manual』を参照してください。どんな場合でも、アプリケーションはこれらのリソースをハードコードしてはいけません。リソース値がアプリケーションによって指定されなければならない場合は、app-defaults ファイルで指定してください。それにより、そのリソースがローカライズできることが保証されます。

ここにはウィジェット・クラス・リソースのみを示し、それらのウィジェットのサブクラスは示していません。たとえば、XmDrawnButton ウィジェット・クラスは、ローカライズされた新しいリソースを使えるようにしませんが、このウィジェットは XmLabelWidget ウィジェット・クラスのサブクラスです。したがって、そのアクセラレータ・リソース、acceleratorText リソースその他が同様にローカライズされ、アプリケーションによるハードコードはできません。

表 2-3 ローカライズできるリソース

ウィジェット・クラス 

リソース名 

Core

*background: 1

XmCommand

*command:

XmCommand

*promptString:

XmFileSelectionBox

*dirListLabelString:

XmFileSelectionBox

*fileListLabelString:

XmFileSelectionBox

*filterLabelString:

XmFileSelectionBox

*noMatchString:

XmLabel[Gadget]

*accelerator:

XmLabel[Gadget]

*acceleratorText:

XmLabel[Gadget]

*labelString:

XmLabel[Gadget]

*mnemonic:

XmList

*stringDirection:

XmManager

*stringDirection:

XmMessageBox

*cancelLabelString:

XmMessageBox

*helpLabelString:

XmMessageBox

*messageString:

XmMessageBox

*okLabelString:

XmPrimitive

*foreground: 1

XmRowColumn

*labelString:

XmRowColumn

*menuAccelerator:

XmRowColumn

*mnemonic:

XmRowColumn(SimpleMenu*)

*buttonAccelerators:

XmRowColumn

*mnemonic:

XmRowColumn

*mnemonic:

XmRowColumn

*mnemonic:

XmRowColumn

*mnemonic:

XmSelectionBox

*applyLabelString:

XmSelectionBox

*cancelLabelString:

XmSelectionBox

*helpLabelString:

XmSelectionBox

*listLabelString:

XmSelectionBox

*okLabelString:

XmSelectionBox

*selectionLabelString:

XmSelectionBox

*textAccelerators:

  1. カラー名はポータブル文字セットに限定するという X プロトコルの制限により、フォアグラウンド・カラーおよびバックグラウンド・カラーはローカライズされません。ローカライズされたカラー名の提供方法は、アプリケーションにゆだねられ、ポータブル文字セットでエンコードされた名前にマップするためにローカライズされたデータベースを提供するべきです。

XmRowColumn ウィジェットには、別のローカライズ可能な文字列リソースがあります。それらのリソースは XmRowColumn のマニュアル・ページの、「シンプル・メニュー作成リソース・セット」の見出しの下で確認できます。このタイトルが示すように、これらのリソースは XmCreateSimpleMenu() 関数で作成された RowColumn ウィジェットにしか影響を与えません。影響を受けるリソースは次のとおりです。

*buttonAccelerator*buttonAcceleratorText*buttonMnemonics*optionLabel*optionMnemonic

これらのリソースはほとんど使用されず、またシンプル・メニューの作成時のみ RowColumn に適用されるので、表 2-3 には入っていません。

リスト・リソース

いくつかのウィジェットにより、アプリケーションはウィジェットの項目のリストを設定または読み込むことができます。表 2-4 は、どのウィジェットによってそれを実行できるか、またウィジェットがリストを設定または読み込むのに使用するリソースを示します。リスト項目はローカライズされるかもしれないので、それらのリストをハードコードしないでください。それよりは、app-defaults ファイルにリソースとして設定し、ローカライズできるようにしてください。各リストの型は XmStringList です。

表 2-4 リストの読み込みに使用されるリソース

ウィジェット・クラス 

リソース名 

XmList

*items:

XmList

*selectedItems:

XmSelectionBox

*listItems:

タイトル

表 2-5 はタイトルおよびアイコン名の設定に使用されるリソースの一覧です。通常、アプリケーションが設定する必要があるのは *title: リソースと *iconName: リソースだけです。それぞれのエンコーディングは、適切なロケール管理を行なっているクライアントでは自動的に検出されます。これらの型はすべて char * または XmString です。

表 2-5 タイトルおよびアイコン名の設定に使用されるリソース

ウィジェット・クラス 

リソース名 

TopLevelShell

*iconName:

TopLevelShell

*iconNameEncoding: 1

WmShell

*title:

WmShell

*titleEncoding: 1

XmBulletinBoard

*dialogTitle:

XmScale

*titleString:

  1. このリソースはアプリケーションが設定してはなりません。アプリケーションが XtSetLanguageProc を呼び出すと、このリソースのデフォルト値 (なし) が自動的に設定され、それにより、ローカライズされたテキストがタイトルに使用できることが保証されます。

Text ウィジェット

表 2-6 は、ロケール別に設定する、または国際化対応アプリケーションの開発者が知っておくべき Text[Field] リソースの一覧です。

表 2-6 ロケール別に設定する Text[Field] リソース

ウィジェット・クラス 

リソース名 

XmSelectionBox

*textColumns: 1

XmSelectionBox

*textString:

XmText

*columns: 1

XmText

*modifyVerifyCallback:

XmText

*modifyVerifyCallbackWcs:

XmText

*value:

XmText

*valueWcs:

XmTextField

*columns: 1

XmTextField

*modifyVerifyCallback:

XmTextField

*modifyVerifyCallbackWcs:

XmTextField

*value:

XmTextField

*valueWcs:

  1. *columns リソースは、表示される文字数によって Text[Field] ウィジェットの初期幅を指定します。可変幅のフォントの場合、また文字サイズが非常に変化するロケールの場合は、カラムはそのロケールの文字レパートリーの中で最も幅の広い文字を表示するのに必要なスペースの量です。たとえば、カラム幅が 10 なら、現在のロケールの文字が少なくとも 10 文字表示できることが保証されます。割り当てられたスペースに、その数以上の文字数を表示することも可能です。

入力メソッド (キーボード)

表 2-7 は、入力メソッドのカスタマイズのためにローカライズできるリソースの一覧です。それらのリソースにより、ユーザまたはアプリケーションは、指定されたロケールにどの入力メソッドが使用されるか、また (プリエディットが適用でき、使用可能な場合) どのプリエディット形式が使用されるかを制御できます。

表 2-7 入力メソッドのカスタマイズ用のローカライズできるリソース

ウィジェット・クラス 

リソース名 

VendorShell

*inputMethod:

VendorShell

*preeditType:

ピックスマップ (アイコン)・リソース

表 2-8 はピックスマップ・リソースの一覧です。場合により、指定されたロケールに対して違うピックスマップが必要になる場合があります。

表 2-8 ピックスマップ・リソース

ウィジェット・クラス 

リソース名 

Core

*backgroundPixmap:

WMShell

*iconPixmap:

XmDragIcon

*pixmap:

XmDropSite

*animation[Mask|Pixmap]:

XmLabel[Gadget]

*labelInsensitivePixmap:

XmLabel[Gadget]

*labelPixmap:

XmMessageBox

*symbolPixmap:

XmPushButton[Gadget]

*armPixmap:

XmToggleButton[Gadget]

*selectInsensitivePixmap:

XmToggleButton[Gadget]

*selectPixmap:

ピックスマップは、必要なときに再呼び出しして表示できるようにメモリに格納された画面イメージです。デスクトップには多数のピックスマップ・リソースがあり、それによってアプリケーションは、バックグラウンド、ボーダ、影、ラベルとボタンの表面、ドラッグ・アイコンその他の用途にピックスマップを供給できます。テキストと同様、一部のピックスマップは特定の言語環境に固有のものです。それらのピックスマップはローカライズされていなければなりません。

デスクトップはピックスマップおよびイメージのキャッシュを管理します。XmGetPixmapByDepth() 関数は、要求されたピックスマップを探してそれらのキャッシュを検索します。要求されたピックスマップがピックスマップのキャッシュに存在せず、対応するイメージがイメージのキャッシュにない場合は、XmGetPixmapByDepth() 関数が、要求されたイメージ名と名前が一致する X ビットマップ・ファイルを検索します。XmGetPixmapByDepth() 関数は、ファイルを検索するために XtResolvePathname() 関数を呼び出します。要求されたイメージ名が絶対パス名の場合、そのパス名が XtResolvePathname() 関数の検索パスです。そうでない場合、XmGetPixmapByDepth() 関数は次のように検索パスを構築します。

これらのパスには %B 置換フィールドがあるかもしれません。XtResolvePathname() 関数への呼び出しのたびに、XmGetPixmapByDepth() 関数は %B を要求されたイメージ名に置き換えます。パスには、XtResolvePathname() 関数が受け取るその他の置換フィールドがあるかもしれません。特に、XtResolvePathname() 関数は %L を表示の言語文字列に置き換え、%l%t%c を表示の言語文字列のコンポーネント (ベンダ依存) に置き換えます。置換フィールド %T は常にビットマップにマップされ、%S は常にヌルにマップされます。

デフォルトでは文字列からピックスマップへのコンバータがないので、ピックスマップは通常 XmGetPixmap() への呼び出しで最初にピックスマップを取り出すことにより、アプリケーションによって作成時に設定されます。XmGetPixmap() は、現在のロケールを使用してピックスマップをどこから検索するか決定します (ピックスマップの検索とロケールの関係については、XmGetPixmap() のマニュアル・ページを参照してください)。

フォント・リソース

表 2-9 はローカライズできるフォント・リソースの一覧です。すべての XmFontList リソースの型は XmFontList です。ほぼすべての場合、フォント・リスト要素を指定するときにはフォント・セットが使用されます。唯一の例外は、ユーザの文字セットに現れない文字データを表示するときです (たとえば数学の記号や読者の注意を引く記号を表示する場合)。

表 2-9 ローカライズできるフォント・リソース

ウィジェット・クラス 

リソース名 

VendorShell

*buttonFontList:

VendorShell

*defaultFontList:

VendorShell

*labelFontList:

VendorShell

*textFontList:

XmBulletinBoard

*buttonFontList:

XmBulletinBoard

*defaultFontList:

XmBulletinBoard

*labelFontList:

XmBulletinBoard

*textFontList:

XmLabel[Gadget]

*fontList:

XmList

*fontList:

XmMenuShell

*buttonFontList:

XmMenuShell

*defaultFontList:

XmMenuShell

*labelFontList:

XmText

*fontList:

XmTextField

*fontList: