Xm ライブラリの場合、ローカライズされたテキストは、XmStringCreateLocalized()を使用して XmString セグメントに挿入しなければなりません。ローカライズされたテキストに関連付けられたタグは XmFONTLIST_DEFAULT_TAG であり、これはフォント・リストのエントリに一致させるのに使用されます。XmStringCreate() を使用してコンパウンド・ストリング内でいくつかのフォントを混合するアプリケーションは、ローカライズされたすべての文字列に対してタグとして XmFONTLIST_DEFAULT_TAG を使用してください。
さらに重要なのは、クライアント間通信の場合、XmStringConvertToCT() 関数が XmFONTLIST_DEFAULT_TAG とタグ付けされたセグメントを、ロケールのコード・セットにエンコードされるよう関連付けることです。そうしない場合、使用されるタグ名によっては、Xm ライブラリはテキスト・データのクライアント間通信のエンコードを正しく識別できないことがあります。
XmString 内のローカライズされた文字列セグメントは、XmFONTLIST_DEFAULT_TAG の付いたフォント・セットを持つフォント・リストで描画することができます。移植性をよくするために、ローカライズされた文字列を使用してください。
次に、ローカライズされた文字列を描画するためにフォント・リストを作成する例を示します。
XmFontList CreateFontList( Display* dpy, char* pattern) { SmFontListEntry font_entry; XmFontList fontlist; font_entry = XmFontListEntryLoad( dpy, pattern, XmFONT_IS_FONTSET, XmFONTLIST_DEFAULT_TAG); fontlist = XmFontListAppendEntry(NULL, font_entry); /* XmFontListEntryFree(font_entry); */ if ( fontlist == NULL ) { XtWarning("fl2fs: can't create fontlist..."); exit (0); } return fontlist; } int main(argc,argv) int argc; char **argv; { Display *dpy; /* Display */ XtAppContext app_context;/* Application Context */ XmFontList fontlist; XmFontSet fontset; XFontStruct** fontstructs; char** fontnames; int i,n; char *progrname; /* program name without the full pathname */ if (progname=strrchr(argv[0], `/')){ progname++; } else { progname = argv[0]; } /* Initialize toolkit and open display. */ XtSetLanguageProc(NULL, NULL, NULL); XtToolkitInitialize(): app_context = XtCreateApplicationContext(); dpy = XtOpenDisplay(app_context, NULL, progname, "XMdemos", NULL, 0, &argc, argv); if (!dpy) { XtWarning("fl2fs: can't open display, exiting..."); exit(0); } fontlist = CreateFontList(dpy, argv[1] ); fontset = FontList2FontSet( fontlist ); /* * Print out BaseFontNames of Fontset */ n = XFontsOfFontSet( fontset, &fontstructs, &fontnames); printf("Fonts for %s is %d¥n", argv[1], n); for (i = 0 ; i < n ; ++i ) printf("font[%d} - %s¥n", i,¥ fontnames[i] ); exit(1); }
リソース・ファイルに指定されたコンパウンド・ストリングは Xm_FONTLIST_DEFAULT_TAG の付いたロケール・エンコーディング・セグメントを持っているため、ローカライズされた文字列はリソース・ファイルに記述できます。たとえば、次の例の fontList リソースは、自動的に XmFONTLIST_DEFAULT_TAG に関連付けられます。
labelString: Japanese string *fontList: -dt-interfacesystem-medium-r-normal-L*-*-*-*-*-*-*:
国際化対応には、次の XmString 関数のセットをお勧めします。
XmStringCreateLocalized()
XmStringDraw()
XmStringDrawImage()
XmStringDrawUnderline()
次の XmString() 関数のセットは、サポートされていない言語では動作しない可能性があることを示す情報を使用するので、国際化対応にはお勧めしません。
XmStringCreateLtoR()
XmStringSegementCreate()