国际语言环境指南

在资源文件中创建绘制表

对于正确国际化的应用程序,应在其资源文件中指定 Rendition 和绘制表。在文件中指定了绘制表后,程序二进制代码就与给定语言环境的特定需要无关,从而能够轻松地进行定制以满足本地需要。

绘制表是用以下语法在资源文件中指定的:resource_spec:[tag[,tag]*]

其中 tag 是适用于某个绘制的 XmNtag 资源的某个字符串。

该行将按指定要求创建包含一个或多个绘制的初始绘制表。这些绘制被附加到指定的标记上:

resource_spec[*|.] rendition[*|.]resource_name:value

下例阐释了与 XmRendition 相关的 CTL 资源,这些资源可用资源文件来设置。fontType 必须设置为 FONT_IS_XOC 才能使布局对象生效。使用 @ls 指定的 layoutModifier 通过绘制对象传递给布局对象。

有关在布局对象中可以使用 layoutModifier 设置的资源的完整列表,请参见《CAE 规范:可移植布局服务:依赖于上下文的定向文本》。开放组:1997 年 2 月;ISBN 1-85912-142-X;文档号码 C616。


实例 6–3 在应用程序中创建绘制表

在创建绘制表之前,应用程序必须至少先创建一个属于该表的绘制。顾名思义, XmRenderTableAddRenditions() 函数还用于用新的绘制来增大绘制表。要创建新的绘制表,请使用 NULL 参数调用 XmRenderTableAddRenditions() 函数来替换现有的绘制表。

下列代码使用在将 XmNfontType 设置为 XmFONT_IS_XOC 时创建的绘制来创建一个绘制表。

int n;
Arg args[10];
Widget w;
XmString labelString;
XmRendition rendition;
XmStringTag renditionTag;
XmRenderTable renderTable;
      /* alef lam baa noon taa - iso8859-6 */
labelString = XmStringGenerate("\307\344\310\346\312\", NULL
			                           XmCHARSET_TEXT, "ArabicShaped");
w = XtVaCreateManagedWidget("a label", xmLabelWidgetClass, parent,
                            XmNlabelString, labelString,
		                         XmNlabelType, XmSTRING,
                            NULL);
n = 0;
XtSetArg(args[n], XmNfontName, "-*-*-medium-r-normal-*-24-*-*-*-*-*-*-*");
     n++;
XtSetArg(args[n], XmNfontType, XmFONT_IS_XOC); n++;
XtSetArg(args[n], XmNlayoutAttrObject, "ar"); n++;
XtSetArg(args[n], XmNlayoutModifier, 
          "@ls numerals=nominal:contextual, shapecharset=iso8859-6"); n++;
renditionTag = (XmStringTag) "ArabicShaped";
rendition = XmRenditionCreate(w, renditionTag, args, n);
renderTable = 
    XmRenderTableAddRenditions(NULL, &rendition, 1, XmREPLACE);
XtVaSetValues(w, XmNrenderTable, renderTable, NULL);