あるプログラムがリモート・ホストにある別のプログラムにデータを通信するとき、元のマシンのコード・セットから受信側のコード・セットへデータを変換する必要が生じることがあります。たとえば、PC コードを使用している PC システムが、ISO/EUC (国際標準化機構 / 拡張 UNIX コード) のエンコーディングを使用しているワークステーションと通信する必要があるときなどです。また、プログラムがあるコード・セットのデータを獲得したが、そのデータを別のコード・セットで表示しなければならない場合も同様です。そのような変換をサポートするために、XPG4 iconv() 関数定義に基づく標準プログラム・インタフェースが用意されています。
コード・セット変換を行うすべてのコンポーネントは、変換のインタフェースとして iconv() 関数を使用してください。システムは、変換のデフォルト・セットをカスタマイズする機構の他に、広範囲の変換を提供することを期待されます。
1 つのコード・セットから別のコード・セットへ変換する共通の方法は、テーブルを使う方法です。場合によりテーブルが大きすぎることもあります。この時は、アルゴリズムによる方法が望ましい方法です。多様な要求事項を満たすために、XPG4 にコード・セット変換のフレームワークが定義されています。そのフレームワークでは、あるコード・セットから別のコード・セットに変換するにはコンバータを開き、変換を実行し、コンバータを閉じます。iconv() 関数には iconv_open()、iconv()、iconv_close() があります。
コード・セット・コンバータは、関数 iconv_open()、iconv()、iconv_close() のフレームワークの下にあります。これらの関数により、数種類の異なる型のコンバータを提供し、使用することができます。アプリケーションは、あるコード・セットの文字を別のコード・セットの文字に変換するのにこれらの関数を呼び出します。iconv() フレームワークにより、コンバータが一様に提供できるようになります。このようなコンバータのアクセスおよび使用は、X/Open XPG4 で標準化されています。
X ICCCM マルチバイト関数 |
ICCCM ワイド文字関数 |
XmbTextPropertyToTextList() |
XwcTextPropertyToTextList() |
XmbTextListToTextProperty() |
XwcTextListToTextProperty() |
libXm() ライブラリは、XmStringConvertToCT() 関数と XmStringConvertFromCT() 関数を提供します。しかし、特定の XmString タグにはハードコードされた前提条件があるため、それらの関数は推奨できません。たとえば、タグが bold() の場合、XmStringConvertToCT() は処理系に依存します。さまざまなプラットフォームで、この関数の動作を世界のすべての地域では保証できません。
詳細は、ローカライズされたテキストのクライアント間通信規約を参照してください。
タイトルを設定する一般的な方法は、リソースを使用することです。しかしアプリケーションが直接ウィンドウのタイトルを設定する場合は、ローカライズされたタイトルをウィンドウ・マネージャに送信しなければなりません。次のガイドラインの他に、XICCEncodingStyle() に定義された XCompundTextStyle() エンコーディングを使用してください。
コンパウンド・テキストは、XmbTextListToTextProperty() か XwcTextListToTextProperty() のいずれかで作成できます。
ローカライズされたタイトルは、WMShell() ウィジェットの XmNtitle() リソースと XmNtitleEncoding() リソースを使用して表示できます。ローカライズされたアイコン名は、TopLevelShell() ウィジェットの XmNiconName() リソースか XmNiconNameEncoding() リソースを使用して表示できます。
ダイアログ・ボックスのローカライズされたタイトルは、XmBulletinBoard() ウィジェットの XmNdialogTitle() リソースを使用して表示できます。
ウィンドウ・マネージャは、ローカライズされた文字列を表示するのに適切なフォント・リストを持っていなければなりません。
次の例は、ローカライズされたタイトルとアイコン名を表示します。この例ではコンパウンド・ストリングからコンパウンド・テキストが作成されます。
#include <nl_types.h> Widget toplevel; Arg al[10]; int ac; XTextProperty title; char *localized_string; nl_catd fd; XtSetLanguageProc( NULL, NULL, NULL ); fd = catopen( "my_prog", 0 ); localized_string = catgets(fd, set_num, mes_num, "defaulttitle"); XmbTextListToTextProperty( XtDisplay(toplevel), &localized_string, 1, XCompoundTextStyle, &title); ac = 0; XtSetArg(al[ac], XmNtitle, title.value); ac++; XtSetArg(al[ac], XmNtitleEncoding, title.encoding); ac++; XtSetValues(toplevel, al, ac);
ウィジェットでなくウィンドウを使用している場合は、XmbSetWMProperties() 関数がローカライズされた文字列を適切な XICCEncodingStyle に自動的に変換します。