Tcl/Tk 汉化解决方案

发表于:2007-07-01来源:作者:点击数: 标签:
Tcl/Tk 是X windows 下比较流行的制作图形界面的软件之一,与GTK, QT相比,在 软件编写和调试上比较有优势. 另外也具有很强的扩展功能. 用户可以自己书写 函数和编写各种库. 现在已经有PerlTk和Python利用Tcl/Tk 的扩展功能来实现 图形功能. 当然,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

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

至此,中文的显示问题已经全部解决, 利用Tcl/Tk ,我将 cdict
建立了一个图形界面, 可以实现cdict 的基本功能. 地址:

http://luliang.dhs.org/luliang/tcltk/tcltk.jpg

写这个界面大约花了几十分钟, 而且我也不是很擅长写程序,可见Tcl/Tk界面
功能的强大.

3) 前几天我在另外一文中指出可以采用 unioncode 来解决, 可是实践证明
不是一个好的办法,虽然可以绕过许多问题但是本身要找到 unioncode 就不太
方便.
button .b -text "\u592a\u9177"
pack .b


就此打住,等我有空了会将最新的tcl/tk 连通汉化版本极其 cdict 和这个
简单的界面打包供下载.

原文转自:http://www.ltesting.net