原文在:https://www.ibm.com/developerworks/cn/linux/i18n/xim/xim-1/index.html
有一个注释:此内容不再更新或维护。全文以PDF 文件的方式提供。由于技术的快速发展,一些内容,步骤和插图可能已经改变。
对XIM的支持是目前各中文Linux版本面临的一个主要问题,由于采用的汉化机制不一样,所以输 入的机制也各不相同。 这就为应用软件开发商带来了极大的不便。所以对双字节语言的国际化输 入标准的支持是中文 Linux发布版本面临的问题之一。通过该文章可以使读者了解XIM标准的重要 性和软件商在应用开发中应注意的问题。
XIM 输入服务器简介
XIM(X Input Method)是X窗口系统上为多字节语言定义的输入协议. 它主 要是针对中文、日文和韩文
建立的协议. 该协议采用了Client/Server的架 构联系输入服务器和应用软件. XIM服务器接收从客户程
序来的请求, 并从 输入方法(Input Method)码表中查找出需要的汉字, 在回送字符串到客户程序.
对于绝大多数输入方法, 需要几个西文字母或数字才能组成所需要的汉字 索引. 所以XIM服务器通常
需要一个预编辑区域和一个状态提示区域, 对于 中文, 通常需要一个候选字区域. 根据预编辑区域和状
态提示区域的不同, 把XIM输入服务器划分成四种输入风格(Input Style), 它们是,
- Root 风格
Root 风格的XIM服务器使用一个独立的窗口来显示预编辑区域. 所有 的显示和交互式操作均由
输入服务器完成. 对于中文来说, 通常还把 状态提示(全角/半角状态, 中文/英文标点符号状态)显
示在窗口上. 预编辑区域和候选字区域在一起. - Over-The-Spot 风格
Over-The-Spot 风格又称光标跟随风格. 顾名思义就是输入条随着输入 位置的改变而移动. 它要求客户程序在光标(Windows下称脱字符)位置 改变后, 告诉输入服务器新的光标位置. 在中文输
入中, 通常跟随条显示 预编辑区域, 候选字区域另外提供. - On-The-Spot 风格
On-The-Spot 风格下, 预编辑区域由客户程序显示, 它也是比较理想的 输入风格. 该风格不能设定
候选区域的位置, 所以对中文的许多需要候选 区域的输入方法来说, 该风格有一定缺陷. - Off-The-Spot 风格
本风格把预编辑区域显示在离输入位置较远的地方, 一般是窗口的下方, 一般较少用到.
输入服务器应该动态切换输入风格. 客户程序也必须挑选出最合适的输入风格.
现有的XIM服务器介绍
目前支持XIM的输入服务器有许多, 下面介绍几个比较常用的. 它们已经被 Linux 国际化组织列为XIM
标准的应用软件.
- 日文: kinput2
kinput2 是支持日文的XIM输入服务器, 它是使用最广泛的输入服务器. 它使用了X11R5的接口, 除
了支持XIM外, 还有自定义的协议. kinput2 是输入的前端, 它可以和Wnn, Canna, ATOK等输入方
法接合起来使用. 它支持上述的四种输入风格. 是开发XIM软件时检测XIM输入支持的事实 标准
软件. 可参见站点 http://web.yl.is.s.u-tokyo.ac.jp/~nayuta/S/kinput2/index-ja.html 收录的有关介
绍. - 简体中文: Chinput
Chinput是同时支持GB和Big5两种编码的XIM输入服务器, 它采用IMdkit 工具支持. 除了支持
XIM外, 还支持中文平台ZWinPro. 最新版本是一个 输入前端, 输入方法和Unicon采用相同的输
入模块. 它支持上述四种 输入风格. 软件版权GPL, 下载站点是 http://go.163.com/~yumingjian/
project-chinput.html. - 繁体中文: xcin
xcin 是同时支持Big5和GB两种编码的XIM输入服务器, 它使用IMdkit工具. 目前的版本已经放弃了
对中文平台的支持. 它自带输入方法, 支持Root 和 Over-The-Spot 两种输入风格. 软件版权GPL。 - 韩文: ami 和 hanIM
ami 和 hanIM 都是支持韩文的XIM输入服务器, ami使用了IMdkit, hanIM 使用了X11R5的接口.
ami 支持Root, OverTheSpot 和 OnTheSpot输入风格, hanIM支持四种输入风格. ami 的版权是GPL,
hanIM是商业软件. 它们的 下载站点是
http://www.kr.freebsd.org/~hwang/ami
http://www.mizi.co.kr/
支持XIM的主要客户软件
客户程序如果支持XIM, 有的采用直接与XIM输入服务器联接, 有的直接使用支持 XIM的高层图形库.
直接编写接口比较复杂, 一般不益采用.
支持XIM的高层库函数有许多, 最早的是Motif, 它也是对国际化支持最好的高级 图形库函数. 它支持
XIM的四种输入风格, 输入区域直接支持XIM输入, 最新版本 中也有输入方法的高级函数接口. 如果我
们使一个Motif程序支持国际化,只需要 在它的资源文件中设定字体和输入风格就可以了, 比如
*fontList: 8x16;-*-song-medium-r-normal--16-*:
*preeditType: OverTheSpot !OffTheSpot,Root,OnTheSpot
Java 便是用Motif开发的解释性语言, 通过设置其资源文件可以使它支持中文. 它支持Root和
OnTheSpot两种输入风格.
现在比较流行的高级图形库 GTK+ 和 Qt 对国际化支持得都比较好. Qt 已经 使用Unicode作为处理内
码, 并且可以在Qt中同时使用多种编码. 如果设定了 缺省的编码, 再使用QObject翻译函数, 可以直接
支持中文. Qt目前的版本支持 中文GBK字符集和Big5字符集. Qt 的输入区域直接支持XIM输入, 最新版
本的 Qt 的每一个Widget都可以接受输入.
Qt 程序目前支持Root, OverTheSpot 和 OffTheSpot输入风格, 启动时可以 指定输入风格,
./qtapp -inputstyle offthespot #overthespot, root
GTK+ 的新版本也将支持Unicode. 目前的版本只需要设置其资源文件正确便可以 使用中文. GTK+ 支
持Root和OverTheSpot输入风格, 在命令行可以指定启动时 的输入风格,
./gtkapp --xim-preedit=position --xim-status=nothing(overspot)
./gtkapp --xim-preedit=nothing --xim-status=nothing(root)
架构于Qt之上的 KDE系列软件和架构于GTK+之上的 GNOME系列软件都支持国际化 标准. 此外, 有许
多绑定Qt和GTK的语言所写的程序也支持国际化标准.
有一些被广泛使用的软件的国际化做得很出色, 比如Netscape/Mozilla 和 XEmacs 都支持多语言,多编
码, Netscape还可以动态切换工作区域的内码.
下面是一些主要软件库和软件对 XIM 的输入风格的支持情况
软件/库 | 输入风格 |
---|---|
gtk+ | Root,OverTheSpot |
Qt | Root,OverTheSpot,OffTheSpot |
Java | Root,OnTheSpot |
OSF/Motif | Root,OverTheSpot,OnTheSpot,OffTheSpot |
LessTif(已国际化的) | Root,OverTheSpot |
rxvt | Root,OffTheSpot,OverTheSpot |
Netscape | Root,OffTheSpot,OverTheSpot |
Mozilla(M17) | Root,OverTheSpot,OnTheSpot |
- 中文Linux发行版本对国际化的支持情况
最早的中文Linux发布版本都使用了中文平台来支持中文的显示和输入. 中文平台 是Linux中文化
最简单直接的方法, 一般采用修改Xlib库或者是截取X协议的方法. 使用中文平台的最明显的缺点
是汉字处理中的"半汉字"问题. 也无法利用XIM 协议带来的好处.
最近, 除了少数中文Linux发布版本外, 都逐渐采用国际化标准作为发布版的 基础. 在国际化方面
比较杰出的有TurboLinux 6.0, RedFlag Linux 2.0, CosixLinux 2.0 和 XTeamLinux 3.2. 在台湾, 有著
名的CLE套件和一些基于 CLE的中文Linux, 比如XLinux, CLE在国际化方面做得较早, 并且对大陆中
文 Linux 影响比较大. - 开发X Window下的商业软件注意的问题
对于应用软件开发商来说, 开发的软件要面对众多的Linux发行版本, 所以必须 考虑Linux版本对
国际化的支持情况和软件本身的特点.
对于开发基于Java的Web软件, 要考虑到浏览器和JVM对国际化的支持程度, 和 它们在国际化方
面的配置状况.
对于开发图形用户界面的软件, 选择图形库是比较重要的. 目前Motif对国际化 的支持比较好, 并
且性能比较优越, 是开发大型软件的首选图形库. Qt是面向 对象的图形库, 开发国际化的软件, 尤
其是同时支持多语言的软件, 是最好的 选择. GTK+/GNOME 在国际化方面支持也比较好. 另外一
些脚本语言, 比如Perl 和 Python 对国际化支持也很好.
参考资料
参考文献和 URL
以下列出一些参考资料和链接:
- Developing Internationalized Software with X, Motif, and CDE, 作者:Thomas C. McFarland
- X11R6 XIM (Open Group)
- Writing Software for the International Market (Digital)