Tcl/Tk 汉化解决方案
 

  Tcl/Tk 是Xwindows下比较流行的制作图形界面的软件之一,与GTK, QT相比,在软件编写和调试上比较有优势. 另外也具有很强的扩展功能. 用户可以自己书写函数和编写各种库.现在已经有PerlTk和Python利用Tcl/Tk 的扩展功能来实现图形功能.

     当然,Tcl/Tk本身也有不足之处,原因之一是语法太过于free,有些接近 korn shell和perl 5.另外一个明显的缺点众多script语言都具有的运行速度慢的问题.我尝试了不同的解释器并采用中文界面和英文界面来对比,发现通常Tcl/Tk的运行速度是Perl 5的一半左右,如果要调用中文界面,那么速度大大受影响.即使如此,Tcl/Tk也是在Unix/Linux下开发中文图形界面的理想选择之一.

    下面介绍如何汉化Tcl/Tk:

1)当前的tcl最新版本是tcl8.3.4,从tcl 8.1起都已经加入了i18n的支持.但也许因为中文软件发展缓慢,tcl 8.1始终不能支持中文. tcl 8.1里有关语言的部分在 unix/tclUnixInit.c 里定义. 比如里面的日文部分:

{"japanese.sjis", "shiftjis"}, 
{"japanese.euc", "euc-jp"}, 
{"japanese-sjis", "shiftjis"}, 
{"japanese-ujis", "euc-jp"},

但是缺少中文, 那么在 {NULL, NULL} 之前加上中文支持: 

{"zh_CN", "euc-cn"}, 
{"zh_CN.gbk", "euc-cn"}, 
{"zh_CN.gb2312", "euc-cn"}, 

这样重新编译 tcl,将得到的tclsh 覆盖系统的tclsh.在这样的情况下tclsh可以在中文locale下运行.而通常安装的tclsh 不能在中文locale 下运行:

setenv LC_ALL zh_CN 
~$ tcl 
tcl> 

同样, wish 也可以在 zh_CN 下运行.

2)tclsh可以在中文 locale下运行还不能直接写带有中文的脚本, 例如下面 
的话就是建立一个按钮: 

button .b -text "按钮" -command exit 
pack .b 

这样的按钮一定是乱码, 那么配置上中文字体也不能解决显示问题: 

.b config -font hanzigb16fs 

解决办法只有一个, 利用tclsh已经提供的 encoding 功能,例如先将"按钮"转换成 euc-cn代码,然后就可以显示了.例如: 

#!/usr/bin/wish -f 
set a [encoding convertfrom euc-cn "按钮" ] 
button .b -text $a -command exit -font hanzigb16fs 
pack .b 

这样就创建了一个中文的按钮. 

至此,中文的显示问题已经全部解决.

3)可以采用 unioncode 来解决, 可是实践证明不是一个好的办法,虽然可以绕过许多问题但是本身要找到 unioncode 就不太方便.

button .b -text "\u592a\u9177"
pack .b





作者:卢亮   liangl@mail.smu.edu

©Tcl/Tk中文网 2003-2008
ALL RIGHTS RESERVED