Linux中文化之Linux的中文化问题简介[4]

[入库:2005年9月19日] [更新:2007年3月25日]

本文简介:

  之後,就名改为 prog.mo 。在此, .pot, pox, gmo 等附档名是 info gettext 中建 议的,分别代表未翻译前的讯息原始档、翻译後的讯息原始档、 经 GNU gettext 套件 编译後的讯息档。
  七、撰写 Xi18n 程式:
  Xi18n 意指在 X Window 中加入 I18N 的支援。除了上述的部分外, Xi18n 还需要考 虑字形设定、图形字串输出、以及输入的问题。由於目前我只有看过 Xlib, 对於其他 Widget 还没有深入研究,因此我只能对 Xlib 的部分稍作说明。而这类的参考资料, 有兴趣的朋友可以找
  The Definitive Guides to the X Window System
  这一系列的书来看,出版商是 OReilly & Associates Inc. ,其中有两本
  Volume One, Xlib Programming Manual (for Version 11)
  Author: Adrian Nye
  R6 Update for the R5 Editions of vols. 1, 2, 4, & 5 Programmers Supplement
  for Release 6 of the X Window System.
  Author: Adrian Nye
  在 I18N 方面有详尽的资料,很值得参考。或者是可以看看 XFree86 内附的 .ps 文件 (如果您有安装的话,应该在 /usr/X11R6/lib/X11/doc □头)。
  第一步 (详见 man XSupportsLocale):
  除了 setlocale() 之外,您还要呼叫 XSupportsLocale() 来确定 X Window 对您 目 前的 locale 是否有支援。另外,您还要呼叫XSetLocaleModifiers() 来设定 一些 X-modifier 的值,□例如下:
  #include
  #include
  #include
  
  main()
  {
  setlocale(LC_CTYPE, "");
  if (XSupportsLocale() != True) {
  printf("error X locale setting\n");
  exit(0);
  }
  XSetLocaleModifiers("");
  }
  在此我们用 X11/Xlocale.h 来取代原来的 locale.h, 这是 "Xlib programming manual" 书中建议的,在其备完整 locale 支援的 libc 环境下,它其实是等价 於
  include , 但若在其他环境, Xlocale.h 会用 XLOCALE 机制来 取代原有的机制。
  上头的 XSetLocaleModifiers 会存环境变数 XMODIFIERS 中取得 X-modifier 的值并 加以设定之。 XMODIFIERS 的格式为:
  export XMODIFIERS=@category=value
  目前 category 只有 "im" 有用,如 "@im=xcin-cxims", 意指设定 xcin-cxims 作为
  此 X Window 程式的 XIM server。
  设定 fontset (详见 man XCreateFontSet):
  以往 X Window 程式都是呼叫 XLoadQueryFont() 之类的函式来载入并使用字型。 但 在 Xi18n 的架构下,一个 locale 的 encoding 通常不能光用一种字型来表示。 例如 我们的 zh_TW.Big5, 半形字需用英文字型 (如 -*-iso8859-1),而全形字需 用中文字 型 (如 -twmoe-*-big5-0), 因此,我们不能用 XLoadQueryFont() 将这 些字型分别载 入,而要用 XCreateFontSet() 来载入所需的 fontset。
  Display *display;
  XFontSet fontset;
  char *fontset_name, **missing_charset, *def_string;
  int missing_charset_count;
  fontset_name = "-*-iso8859-1,-twmoe-*-big5-0";
  fontset = XCreateFontSet(display, fontset_name,
  &missing_charset_list,
  &missing_charset_count,
  &def_string);
  在这□我们可以将 fontset 看成一个「字型物件」,而不要把它看成 "-*-iso8859-1"
  与 "-twmoe-*-big5-0" 这两种字型的组合。当我们要画任何字 串时,我们不用担心要 画的到底是全型字或半型字,使用 fontset 便能帮我们 处理一切。
  画出字串 (详见 man XwcDrawImageString, man XmbDrawImageString, manXOpenOM) 平常我们要在视窗画字串时,都会用 XDrawImageString() 等函式,或者用
  XDrawImageString16() 来画双位元的字串 (即全型字)。现在可以我们用 XwcDrawImageString (用来画 wide-char (wchar_t *) 字串) 或 XmbDrawImageString
  (用来画 multi-byte (char *) 字串) 。不管您输入的字 串是全型或半型,或二者的 混合,使用者两个函式都能正确处理,同时会根据 您的 fontset 的设定来画字。
  除此之外, X11R6 还有一个 Output Method 机制,用来做多国语系字串输出 (画字 串),我们可以在程式中呼叫 XOpenOM() 来开启一个 Output Method 。 但这部分我还 没有仔细研究,有兴趣的朋友可以参考本章开头所列的参考资料 以获得进一步资讯。 XIM (详见 man XOpenIM) XIM 应分两方面来谈,一是 XIM server, 另一是 XIM client。对 XIM client 而言,
  如同 Output Method 一般,我们可以在程式中呼叫 XOpenIM() 来开启一 个 Input Method, 同时指定 XIM server 的名字。但这部分我还没有仔细研究, 有兴趣的朋友
  可以参考本章开头所列的参考资料。
  我目前是在写 XIM server 的部分,但我没有直接拿 X Window 的函式来写,而 是拿 IMdkit lib 来写,以简化整个程式写作。在此我不多作说明了,有兴趣的 朋友可以抓
  取:
  xcin-2.5-19990218.tar.gz
  回去看,□头的doc/programming/ 目录中有对此稍作说明,同时 IMdkit 的 source 也整个附在 xcin-2.5 source 中。
  
  
  

本文关键:Linux中文化之Linux的中文化问题简介
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top