ロケール

XSupportsLocale現在のロケールがサポートされているか
XSetLocaleModifiers現在のロケール設定の X 修飾子を設定
Bool XSupportsLocale(void);
Xlib 関数が現在のロケールで動作できる場合、True を返します。

False を返した場合、ロケールに依存する関数を使った時は、XLocaleNotSupported が返ります (戻り値の型が Status の場合)。
他の Xlib ロケールに依存するルーチンは、「C」ロケールで動作します。

setlocale、XSupportsLocale、XSetLocaleModifiers の 3 つの関数を呼び出して、ロケールを構成します。

X は、ホスト環境によって定義された、1 つ以上のロケールをサポートします。
ANSI C ライブラリに準拠する実装では、setlocale() でロケールをセットします。
この関数は、ホスト C ライブラリと Xlib の両方のロケール操作を設定します。
Xlib の操作は LC_CTYPE カテゴリによって管理され、これを現在のロケールと呼びます。
実装では、setlocale に加えて、ロケールを通知する実装依存のメカニズムを提供することが許可されています。
char *XSetLocaleModifiers(char *modifier_list);
現在のロケール設定の X 修飾子を設定します。

modifier_list に加えて、XMODIFIERS 環境変数のデフォルト値が追加されます。
リスト内に同じカテゴリが複数個存在する場合は、リスト内の最初の設定が使用されます。
リストに含まれていないカテゴリは、現在のロケールの実装に依存するデフォルトに設定されます。
カテゴリの値が空の場合は、実装に依存するデフォルトを使用することを、明示的に指定します。

プログラムの起動時、有効な修飾子は、修飾子を設定するための最初の呼び出しが成功するまでは指定されません。
ロケールが変更されるたびに、有効な修飾子は、次に修飾子を設定する呼び出しが成功するまでは、指定されなくなります。
クライアントは、ロケールを設定した後、ロケールに依存する Xlib ルーチンを呼び出す前に、常に NULL 以外の modifier_list を指定して、XSetLocaleModifiers を呼び出す必要があります。

現在定義されている唯一の標準修飾子カテゴリは「im」です。これは、入力メソッドを指定します。
入力メソッドの値は標準化されていません。
1 つのロケールで複数の入力メソッドを使用し、ユーザーの制御に従って、入力メソッドを切り替えることができます。
修飾子は、有効な初期入力メソッド、または入力メソッドの順序付きリストを指定できます。
実装に依存する方法で、単一の im 値に複数の入力メソッドを指定できます。

クライアントがロケールと修飾子を初期化する場合に推奨される手順は、次の優先順位付けされたソースのいずれかから、ロケールと修飾子アナウンサーを個別に取得することです。

・コマンドラインオプション、リソース、空の文字列 ("")

上記のうち、最初に定義されたものを使用する必要があります。
コマンドラインオプションまたはロケールリソースが定義されている場合、その結果、すべてのカテゴリが指定されたロケールに設定され、ローカルホスト環境のカテゴリ固有の設定が上書きされることに注意してください。
modifier_list
「@category=value」の形式で、NULL で終了する文字列。
この文字列に加えて、XMODIFIERS 環境変数の値が追加される。

NULL の場合、現在のロケール修飾子を変更しない。
空文字列 ("") の場合、XMODIFIERS 環境変数の値だけを指定する。

category はカテゴリ名、value は値。
カテゴリ名は、POSIX ポータブル ファイル名文字セットに制限されます。
値は現在のロケールでエンコードされます。空の場合は、実装に依存するデフォルト値となります。
戻り値
関数が成功すると、完全な修飾子の文字列のポインタが返されます。
返された文字列は Xlib によって所有されているため、クライアントが変更または解放しないこと。
文字列は、現在のロケールまたは修飾子が変更された後、Xlib によって解放される可能性があります。解放されるまでは、Xlib によって変更されることはありません。

無効な値が指定された場合は NULL が返され、修飾子はいずれも変更されません。