对于正确国际化的应用程序,应在其资源文件中指定 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。
在创建绘制表之前,应用程序必须至少先创建一个属于该表的绘制。顾名思义, 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);