Xt ツールキットの初期化前に、アプリケーションは通常 XtSetLanguageProc() 関数を次のうちどれか 1 つの形式で呼び出します。
XtSetLanguageProc (NULL, NULL, NULL)
ロケールは、(たとえば XtAppInitialize() 関数を介して) ツールキットが初期化されるまでは、実際には設定されません。したがって、XtSetLanguageProc() 関数と、ツールキットの初期化の後に (たとえば catopen() 関数を呼び出す場合)、setlocale() 関数が必要になるかもしれません。
リソース・データベースは現在のプロセスのロケールに作成されます。画面ごとのリソース・データベースを作成する前のディスプレイ初期化の間に、イントリンシクス関数は、コマンド行かディスプレイごとのリソース指定にあるオプションに応じてロケールを設定するために、指定されたアプリケーション・プロシージャを呼び出します。
アプリケーションにより提供されるコールアウト・プロシージャの型は XtLanguageProc で、形式は次のとおりです。
typedef String(*XtLanguageProc)(displayID,languageID, clientdata); Display *displayID; String languageID; XtPointer clientdata;
ディスプレイを渡します。
コマンド行またはサーバのディスプレイごとのリソース指定から取得される初期言語値を渡します。
XtSetLanguageProc() 関数への呼び出しで指定された追加のクライアント・データを渡します。
言語プロシージャにより、アプリケーションは、ロケールを XtDisplayInitialize() 関数で決定された言語リソースの値に設定できます。この関数は、以降にリソース・ファイルを読み込むために XtDisplayInitialize() 関数が使用する新しい言語文字列を返します。
最初は、イントリンシクス関数によって言語プロシージャは設定されていません。XtDisplayInitialize() 関数によって使用されるように言語プロシージャを設定するには、XtSetLanguageProc() 関数を使用してください。
XtLanguageProc XtSetLanguageProc(applicationcontext, procedure, clientdata) XtAppContext applicationcontext; XtLanguageProc procedure; XtPointer clientdata;
言語プロシージャが使用されるアプリケーション・コンテキストか、またはヌルの値を指定します。
言語プロシージャを指定します。
言語プロシージャが呼び出されたときに言語プロシージャに渡される追加のクライアント・データを指定します。
XtSetLanguageProc() 関数は、XtDisplayInitialize() 関数から呼び出される言語プロシージャを、指定されたアプリケーション・コンテキストで初期化される以降のすべてのディスプレイのために設定します。applicationcontext パラメータがヌルの場合、指定された言語プロシージャは、呼び出しプロセスによって作成されたすべてのアプリケーション・コンテキスト (将来作成されるかもしれないアプリケーション・コンテキストも含みます) に登録されます。procedure パラメータがヌルの場合、デフォルトの言語プロシージャが登録されます。XtSetLanguageProc() 関数は、前に登録されていた言語プロシージャを返します。言語プロシージャが登録されていなかった場合の戻り値は不定です。しかし、その戻り値が XtSetLanguageProc() 関数以降の呼び出しに使用される場合は、デフォルトの言語プロシージャが登録されることになります。
デフォルトの言語プロシージャは次のことを行います。
環境に応じてロケールを設定します。ANSI C システムでは、これは setlocale (LC_ALL, "language") 関数を呼び出すことで実行されます。エラーが発生した場合は、XtWarning() 関数で警告メッセージが発行されます。
現在のロケールがサポートされているかを確認するために、XSupportsLocale() 関数を呼び出します。サポートされていない場合、XtWarning() 関数で警告メッセージが発行され、ロケールは C に設定されます。
空の文字列を指定する XSetLocaleModifiers() 関数を呼び出します。
現在のロケールの値を返します。ANSI C システムでは、これは setlocale (LC_CTYPE, NULL) 関数への最終呼び出しからの戻り値です。
クライアントはこの機構を利用して、次の例のように XtDisplayInitialize() 関数の前に XtSetLanguageProc() 関数を呼び出すことにより、ロケールを確立できます。
Widget top; XtSetLanguageProc(NULL, NULL, NULL); top = XtAppInitialize( ... ); ...