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

シンプル・テキストの基本的なデータ交換

あるプログラムがリモート・ホストにある別のプログラムにデータを通信するとき、元のマシンのコード・セットから受信側のコード・セットへデータを変換する必要が生じることがあります。たとえば、PC コードを使用している PC システムが、ISO/EUC (国際標準化機構 / 拡張 UNIX コード) のエンコーディングを使用しているワークステーションと通信する必要があるときなどです。また、プログラムがあるコード・セットのデータを獲得したが、そのデータを別のコード・セットで表示しなければならない場合も同様です。そのような変換をサポートするために、XPG4 iconv() 関数定義に基づく標準プログラム・インタフェースが用意されています。

コード・セット変換を行うすべてのコンポーネントは、変換のインタフェースとして iconv() 関数を使用してください。システムは、変換のデフォルト・セットをカスタマイズする機構の他に、広範囲の変換を提供することを期待されます。

iconv 変換関数

1 つのコード・セットから別のコード・セットへ変換する共通の方法は、テーブルを使う方法です。場合によりテーブルが大きすぎることもあります。この時は、アルゴリズムによる方法が望ましい方法です。多様な要求事項を満たすために、XPG4 にコード・セット変換のフレームワークが定義されています。そのフレームワークでは、あるコード・セットから別のコード・セットに変換するにはコンバータを開き、変換を実行し、コンバータを閉じます。iconv() 関数には iconv_open()iconv()iconv_close() があります。

コード・セット・コンバータは、関数 iconv_open()iconv()iconv_close() のフレームワークの下にあります。これらの関数により、数種類の異なる型のコンバータを提供し、使用することができます。アプリケーションは、あるコード・セットの文字を別のコード・セットの文字に変換するのにこれらの関数を呼び出します。iconv() フレームワークにより、コンバータが一様に提供できるようになります。このようなコンバータのアクセスおよび使用は、X/Open XPG4 で標準化されています。

X クライアント間 (ICCCM) 変換関数

Xlib は変換するために次の関数を提供します。

X ICCCM マルチバイト関数 

ICCCM ワイド文字関数 

XmbTextPropertyToTextList()

XwcTextPropertyToTextList()

XmbTextListToTextProperty()

XwcTextListToTextProperty()


注 -

libXm() ライブラリは、XmStringConvertToCT() 関数と XmStringConvertFromCT() 関数を提供します。しかし、特定の XmString タグにはハードコードされた前提条件があるため、それらの関数は推奨できません。たとえば、タグが bold() の場合、XmStringConvertToCT() は処理系に依存します。さまざまなプラットフォームで、この関数の動作を世界のすべての地域では保証できません。


詳細は、「ローカライズされたテキストのクライアント間通信規約」を参照してください。

ウィンドウ・タイトル

タイトルを設定する一般的な方法は、リソースを使用することです。しかしアプリケーションが直接ウィンドウのタイトルを設定する場合は、ローカライズされたタイトルをウィンドウ・マネージャに送信しなければなりません。次のガイドラインの他に、XICCEncodingStyle() に定義された XCompundTextStyle() エンコーディングを使用してください。

次の例は、ローカライズされたタイトルとアイコン名を表示します。この例ではコンパウンド・ストリングからコンパウンド・テキストが作成されます。

#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 に自動的に変換します。