X Window下的中文环境Unix的中文化对于Unix的推广使用一向是个难题,对于象FreeBSD这样的操作系统来讲,中文化工作比较零乱,虽然有不少X下的中文软件,但是由于国内软件发展的水平还不高,自由软件的开发水平更是如此,并且自由软件的开发者之间也没有被有效的组织起来,因此还没有出现一个很完整的中文系统。
然而中文相关的软件却相当丰富,在Ports Collection中,有一个类别就是chinese,专门收集中文相关的处理软件,但其中绝大多数是台湾的BIG5版本。因为台湾在FreeBSD领域的发展相当快,很多软件都是先由台湾出现相应BIG5版本之后,再出现GB版本。
bash-2.02$ ls /usr/ports/chineseCJK big5fonts gbfonts nvi-big5 tedCVS c2t gbscript nvi-euc-cn tinMakefile celvis hc nvi-euc-tw xcinREADME.html cless hztty pine3Wnn cnsfonts kcfonts pine4bg5ps cxterm lunar pkgbig5con gb2ps mule-wnn4 rxvt
中文X应用软件
在X Window下使用中文的基本条件之一就是需要安装合适的中文字库。当前的XFree86发行版本中带有一些基本中文字库,在系统安装选择X组件的设置时需要将其包括在内,然而中文存在不同的编码方式,使用不同编码的应用程序就使用不同的字体文件,XFree86中提供的中文字体对于另外一些中文程序还是不够的。
Packages Collection中的chinese类别中也提供了其他的一些BIG5和GB编码的字体,如gbfonts、kcfonts、big5fongs等软件包,需要使用pkg_add命令将其安装入系统。在真正执行中文X应用程序时,可以使用xlsfont命令可以查看系统中是否有相应字库,如:
$ xlsfonts *gb*-cc-song-medium-r-normal-jiantizi-0-0-75-75-c-0-gb2312.1980-0-cc-song-medium-r-normal-jiantizi-40-400-75-75-c-400-gb2312.1980-0-cc-song-medium-r-normal-jiantizi-48-480-75-75-c-480-gb2312.1980-0-isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0-isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0-isas-song ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0-isas-song ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0-isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-0hanzigb16fshanzigb16sthanzigb24st
当一个字体不存在但同时存在同样编码的其他字体的时候,可以通过在fonts.alias中定义别名的方法来帮助解决这个问题。
除了Packages Collection提供的字体之外,从网络上也可以得到其他的一些中文字体。在ftp://ftp.ifcss.org站点中收集了很多自由或共享中文字体和中文软件。
cxterm
cxterm是一个使用非常广泛的中文X终端程序,已经被移植到很多种类的Unix系统中。它已经被FreeBSD的爱好者做成Packages,因此安装起来非常简单。cxterm支持GB、BIG5以及日、韩文等编码和多种输入法。
直接启动cxterm只能用于浏览中文而不能进行输入,这是由于cxterm需要X系统的一些资源设置,以使用快捷键切换不同输入法,并根据设置寻找其输入法对应的数据文件。要输入中文必须进行设置,将资源文件预先载入,指定热键、输入法和输入字典所在的目录。cxterm软件包中提供了一个缺省的资源文件CXterm.ad,一些使用者将这个文件中的相应资源定义放入~/.Xdefault中,用户登录进入X Window时就载入这些资源。另外,cxterm还提供了一个shell脚本 ── CXterm,可以在启动cxterm之前完成相应的资源设置工作,所以一般应该 用如下CXterm命令来启动cxterm,这种启动方式更为简易。
$ CXterm &
在中文的仿真终端下使用bash作为shell时,会发现在命令行中无法输入中文,这是因为bash对输入进行了额外处理,可以在~/.bashrc中设置bash让其通过中文(另一个可能的因素为stty的终端设置):
stty pass8bind 'set convert-meta off'bind 'set meta-flag on'bind 'set output-meta on'
在FreeBSD下的预编译的cxterm软件包中,cxterm的输入法及输入字典放在了/usr/X11R6/lib/X11/cxterm.dic目录中。由于cxterm的影响,它的输入法被相当多的X Window下的中文软件所使用。
标准的CXterm是黑白的,但也存在一个补丁,使CXterm能显示彩色。然而,Packages Collecion中预编译好的CXterm为标准程序,要使用彩色CXterm就需要自己下载补丁并重新编译CXterm。
Xcin与crxvt
crxvt是另一个中文X仿真终端软件,与cxterm相比,它更小巧,占用更少的内存,并能以ANSI标准显示彩色。Xcin是一个独立的输入服务器,它独立于具体的X程序之外来提供中文输入功能,X应用程序可以使用其接口支持中文输入。crxvt就使用Xcin作输入系统。与cxterm的将输入与仿真终端集成在一起的方式不同,Xcin在crxvt外打开一个单独的窗口,但在crxvt中可以使用Ctrl-Space进行Xcin下的中英文输入切换。可以看出Xcin的设计目的是作为一个通用输入模块来实现的,以便多个应用软件都能使用同一个输入模块来进行中文输入,而不是象cxterm一样,每个程序使用自己的输入模块。
FreeBSD的Packages Collection中,也包括了Xcin与crxvt,但遗憾的是,他们是台湾big5版本。当然这也容易理解,这个软件本来就是由台湾人开发的。其中crxvt可以通过使用hztty使其能显示gb数据,但使用者显然不会使用台湾的输入法输入中文。幸好这个软件已经被移植到GB环境下,并也有编译好的软件包形式(未被正式FreeBSD发行版本收录),这样就可以使用pkg_add等工具进行管理,而不再需要手工编译。
执行时,需要启动xcin和cxrvt,注意要使用Xcin而不是xcin启动Xcin,主要是Xcin能使用正确的输入法参数启动真正的xcin程序,直接启动xcin由于没有指定输入模块的设置,就会导致程序启动失败。
$ Xcin &$ cxrvt &
其他支持中文的软件与中文本地化
除了cxterm、cxrvt之外,Ports Collection还包括其他一些软件,如hztty用于终端上hz、big5、gb等不同编码的动态转换,big5con用于在控制台上显示中文big5码(在hztty的帮助下可以显示gb码),cvi用于替换vi进行中文编辑工作,cless用于替换more显示中文,gb2ps用于中文文本文件的打印处理等。
$ LANG=zh_CN.EUC; export LOCALE$ LC_ALL=zh_CN.EUC; export LC_ALL
对于支持多语言的软件,使用环境变量LANG和LC_ALL来标识不同的语言、及不同的环境。缺省情形下使用的语言LANG被设置为C,如果要支持中文,应该设置为zh_EUC.GB,同样LC_ALL用于设置不同语言使用的信息格式的不同,如日期、时间的表示方式等。虽然当前不是每个应用程序都支持这些环境变量,但随着FreeBSD系统的升级,应用程序国际化程度的提高,以后的软件越来越多会对各种语言提供更完善的支持。
另外,FreeBSD下的一些传统工具程序不支持国际化的语言,应该使用较新的GNU工具代替。例如标准的ls命令不能显示中文文件名,可以安装gnuls软件包,使用gnuls -N命令来代替缺省的ls命令,可以通过shell中的alias设置,使得用户感觉不同执行命令的差异。
未完,待续。。。