当前位置:Linux教程 - Linux资讯 - TurboLinux 4.02中文化初探

TurboLinux 4.02中文化初探

前两天装了Redhat6.1, 没有中文很痛苦, 想从TurboLinux中偷来中文支持, 顺便了解了一些TurboLinux在中文方面的工作.1. 文件系统对 GBK/Big5 codepage 的支持(能够正确访问Windows 95/98/NT下中文 长文件名).

这里需要对内核打补丁, 取来nls_cp936-linux-2.2.0.patch.gz,(cp936是大陆的,cp950是台湾的)这个补丁在TLC的站点没找到,我从166.111.136.3/pub/linux/driver下去的, 好像与版本关系不太大, 我的kernel版本是2.2.10将该文件拷至/usr/src,# gzip -d nls_cp936-linux-2.2.0.patch.gz# patch -p0 < nls_cp936-linux-2.2.0.patch

到/usr/src/linux下,make menUConfig到file system -> NLS.. 选择CP936为模块从新编译内核, 新内核在cce下就可以看到98分区里的中文文件名了这个比较容易(不知FreeBSD有没有这样的补丁,:)

2. 安装localelocale在中文化方面的作用极大, 但似乎没有引起足够的重视,TLC 4.02对 locale 的支持, 包括GBK/Big5 locale, 全面支持NLS及I18N.主要是localedata-zh-0.05-4.noarch.rpm, 将这个包装上,理论上就可以使用locale了.老于(yumj)(不是那个玉米糊,:P)写了个程序可以用来测试locale是否正常#include #include #include char *string = "测试Locale的软件!";void main(){int i, l, length;char *ptr;char cbuf[128];wchar_t wcbuf[128];setlocale(LC_ALL, ""); printf("MB_CUR_MAX %d\n", MB_CUR_MAX);length = strlen(string);printf("string %s, length %d\n", string, length);/* mbstowcs() */l = mbstowcs(wcbuf, string, 128);printf("mbstowcs() -> num %d,", l);for (i = 0; i < l; i++) {printf(" %x", wcbuf);}printf("\n");/* wcstombs() */l = wcstombs(cbuf, wcbuf, 128);printf("wcstombs() -> length %d, %s\n", l, cbuf);/* mblen() check */for (ptr = string; *ptr; ) {l = mblen(ptr, length);mBTowc(wcbuf, ptr, length);printf("ptr %s, mblen %d, wchar %x\n", ptr, l, wcbuf[0]);if (l <= 0) {break;}ptr += l; }}//end

在TLC4.02下locale为en_US:MB_CUR_MAX 1string 测试Locale的软件!, length 17mbstowcs() -> num 17, b2 e2 ca d4 4c 6f 63 61 6c 65 b5 c4 c8 ed bc fe 21wcstombs() -> length 17, 测试Locale的软件!ptr 测试Locale的软件!, mblen 1, wchar b2ptr 馐訪ocale的软件!, mblen 1, wchar e2ptr 试Locale的软件!, mblen 1, wchar captr 訪ocale的软件!, mblen 1, wchar d4ptr Locale的软件!, mblen 1, wchar 4cptr ocale的软件!, mblen 1, wchar 6fptr cale的软件!, mblen 1, wchar 63ptr ale的软件!, mblen 1, wchar 61ptr le的软件!, mblen 1, wchar 6cptr e的软件!, mblen 1, wchar 65ptr 的软件!, mblen 1, wchar b5ptr 娜砑?, mblen 1, wchar c4ptr 软件!, mblen 1, wchar c8ptr 砑?, mblen 1, wchar edptr 件!, mblen 1, wchar bcptr ?, mblen 1, wchar feptr !, mblen 1, wchar 21


[1] [2] [3] 下一页 

在TLC4.02下locale为zh_CN:MB_CUR_MAX 3string 测试Locale的软件!, length 17mbstowcs() -> num 12, 6d4b 8bd5 4c 6f 63 61 6c 65 7684 8f6f 4ef6 21wcstombs() -> length 17, 测试Locale的软件!ptr 测试Locale的软件!, mblen 2, wchar 6d4bptr 试Locale的软件!, mblen 2, wchar 8bd5ptr Locale的软件!, mblen 1, wchar 4cptr ocale的软件!, mblen 1, wchar 6fptr cale的软件!, mblen 1, wchar 63ptr ale的软件!, mblen 1, wchar 61ptr le的软件!, mblen 1, wchar 6cptr e的软件!, mblen 1, wchar 65ptr 的软件!, mblen 2, wchar 7684ptr 软件!, mblen 2, wchar 8f6fptr 件!, mblen 2, wchar 4ef6ptr !, mblen 1, wchar 21

这里有个很怪的问题, 装上这个包后, 在rh6.1下locale为zh_CN, 极不正常,MB_CUR_MAX 3string 测试Locale的软件!, length 17mbstowcs() -> num -1,wcstombs() -> length 0, ptr 测试Locale的软件!, mblen -1, wchar 0

在rh6.1下locale为zh_TW.Big5, 要好些MB_CUR_MAX 3string 测试Locale的软件!, length 17mbstowcs() -> num -1,

ptr 测试Locale的软件!, mblen 2, wchar 8046ptr 试Locale的软件!, mblen 2, wchar 5f78ptr Locale的软件!, mblen 1, wchar 4cptr ocale的软件!, mblen 1, wchar 6fptr cale的软件!, mblen 1, wchar 63ptr ale的软件!, mblen 1, wchar 61ptr le的软件!, mblen 1, wchar 6cptr e的软件!, mblen 1, wchar 65ptr 的软件!, mblen 2, wchar 8154ptr 软件!, mblen -1, wchar 8154

怀疑TLC对glibc打过补丁, 就用TLC4.02的glibc 2.1.1替换RH6.1的glibc2.1.2,得强行替换# rpm -e glibc; rpm -i --nodeps glibc-2.1.1-4.i386.rpm然后就正常了, 没搞明白, glibc 2.1开始不就完全支持locale了吗,还要动什末,:(

eXPort LC_ALL=zh_CN后, 就中文locale就可以用了,这时如果你在TLC下, 运行mc, 菜单就是中文的啦, RH6.1下的mc也是符合i18n的可惜没有中文message, 菜单自然不是中文啦, 可以用TLC的mc包换掉RH6.1的. 另外, 程序的出错提示也是中文的啦, 可以用TLC的gettext换掉rh6.1的,运行gettext, 看看中文的提示信息, hehe

不过TLC作的不彻底, 只提供了很少的几种软件的中文message,不知道其他中文Linux的locale作的怎末样

3. X-Windows的中文化按照TLC的说法, 采用freetype zwinpro的外挂方案, 不用改动X-window这里比较麻烦,步骤很多:(1)安装中文字库zh-ttf-1.1-7.i386.rpm在/usr/X11R6/lib/X11/fonts/tt/安装华天中文字库

rpm -ivh zh-ttf-setup-1.1-2.i386.rpm在/usr/X11R6/lib/X11/fonts/tt/下, 字库的fonts.dir和fonts.alias

(2)配置Xfs( X font server)将路径/usr/X11R6/lib/X11/fonts/tt/加入到XF86config中的FontPath列表中去同时将该路径加入到/etc/X11/fs/config的catalogue中去 kill -HUP xfs的pid重起Xfs

(3)安装Zwinpro 3.0zh-pcf和ZWinPro。最好一齐装,他们相互之间有dependencies,也可,rpm -i --nodeps。 我用的是北京linux俱乐部的版本,已经有cxterm了. 如果你的rh没有,请先安装它, 因为Zwinpro使用了cxterm的输入法,使用zh-pcf的字库.Zwinpro由三部分组成:输入法chinput,wrap库libZWin.so,字典xdict从中文化的角度看, 前两者更重要些。用gtk widget的程序很奇怪,明明调用一下gtk_set_locale()就可以有国际化支持,但却偏不用(象GXedit),gtk的作者也不在gtk_init()里调用一下。没办法,只好硬弄个wrapper.so 用LD_PRELOAD加上去。


上一页 [1] [2] [3] 下一页 

(我先安装的是binary的包,gnome的中文界面出来了,但在xterm中启动chinput时X-window跟死了似的,可能是哪个库冲突了)还是用TLC站点的繁体版的ZWinpro3.0的source编译(简体版只有2.0版,还不支持XIM).再用简体版的配置文件覆盖之(主要是/usr/lib/ZWinpro目录下的Chinput.ad, ZWinPro.ad和zwincontrol.rc)这样就可以看到chinput的输入条了,:)

tlc 的 xwindow 也是打过 patch 的,所以把 tlc 的 xfree86 一并拿过来应该比较好 :-). tlc 的 xfree86里不仅增加了对 truetype 字体的支持(xtt),而且好象还有对 x-locale 的patch. 另外,xfs 读 truetype 中文字体的速度很慢,还是别用了。

(4)设置gtk

在/etc/gtk里要有gtkrc.zh,没有自己new一个,要有类似下面的语句:(我比较懒,直接从TLC拷过来)style "default" {fontset = "-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,\-*-song-medium-r-*--12-*-*-*-*-*-gb2312.1980-0"}

class "GtkWidget" style "default" (关键是这行)

(5)设置环境变量export LC_ALL=zh_CNexport LANG=zh_CNexport LD_PRELOAD=/usr/lib/libZWin.so

这时startx进入gnome, 就已经是中文环境了, GXedit可以完美的支持中文, 不会出现删除时半个汉字的情况.kde的问题比较奇怪, rh6.1上有两个qt lib, qt-1.44和qt-2.01, kde桌面是用qt-1.44编译的, 但缺省的却是qt-2.01?qt-1.44要支持中文的话,需要打补丁, 我将rh6.1的qt-1.44库换成TLC的打过补丁的版本,但kde起不来.后来听TLC的人说, 他们是先给qt-1.44打i18n的补丁, 编译通过,再编译整个kde src.

这样看来, 要在rh6.1下拥有中文的kde环境, 要末将TLC的kde包统统弄来, 要末使用中文X-server, 外挂方案是不可行啦.不知道BluePoint的中文X-server是怎么回事,采用这种方案, 需不需要对qt-1.44打i18n补丁?

我个人觉得TurboLinux的最大贡献是: gbk locale和zwinpro, 当然与台湾的CLE路子很象(big5 locale和xcin), 工作也差不多. 其实象中文man这样的工作也很值得作, 不过好像大家都不以为然, 很不屑的样子. Linux要打桌面的话,没有中文的帮助怎末说的过去?

有不对的地方请大家指正

我的解决办法是,用 tlc 做框架,把其他发行版中比较好的东西般到上面。

如,我把redhat 6.1的 kde 1.1.2 拿来重新编译了一下(就是用 rpm --rebuild 啦)现在用着很好哦!

另外还把 GNOME 十月版装上了,很爽的说!

还有一大堆新东东,如 gedit 0.6.1, balsa 0.6, xemacs 21.4, rpm 3.0.3,xmms 0.9.5, freeamp 2.0, mtv 1.1.0.6, realplay G2 beta(实在太多,数不过来了)

这样做的好处是不用考虑 tlc 中那些烦人的中文补丁的移植工作。

我唯一没有搞成的是 kdevelop, tlc 的 qt-1.44 库和它不兼容。谁要是能做个好事,编译一个stable link 的 kdevelop 给咱们用用就好了。

--※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.26.196]

——摘自:BBS水木清华

(出处:http://www.sheup.com)


上一页 [1] [2] [3] 

(4)设置gtk

在/etc/gtk里要有gtkrc.zh,没有自己new一个,要有类似下面的语句:(我比较懒,直接从TLC拷过来)style "default" {fontset = "-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,\-*-song-medium-r-*--12-*-*-*-*-*-gb2312.1980-0"}

class "GtkWidget" style "default" (关键是这行)

(5)设置环境变量export LC_ALL=zh_CNexport LANG=zh_CNexport LD_PRELOAD=/usr/lib/libZWin.so

这时startx进入gnome, 就已经是中文环境了, GXedit可以完美的支持中文, 不会出现删除时半个汉字的情况.kde的问题比较奇怪, rh6.1上有两个qt lib, qt-1.44和qt-2.01, kde桌面是用qt-1.44编译的, 但缺省的却是qt-2.01?qt-1.44要支持中文的话,需要打补丁, 我将rh6.1的qt-1.44库换成TLC的打过补丁的版本,但kde起不来.后来听TLC的人说, 他们是先给qt-1.44打i18n的补丁, 编译通过,再编译整个kde src.

这样看来, 要在rh6.1下拥有中文的kde环境, 要末将TLC的kde包统统弄来, 要末使用中文X-server, 外挂方案是不可行啦.不知道BluePoint的中文X-server是怎么回事,采用这种方案, 需不需要对qt-1.44打i18n补丁?

我个人觉得TurboLinux的最大贡献是: gbk locale和zwinpro, 当然与台湾的CLE路子很象(big5 locale和xcin), 工作也差不多. 其实象中文man这样的工作也很值得作, 不过好像大家都不以为然, 很不屑的样子. Linux要打桌面的话,没有中文的帮助怎末说的过去?

有不对的地方请大家指正

我的解决办法是,用 tlc 做框架,把其他发行版中比较好的东西般到上面。

如,我把redhat 6.1的 kde 1.1.2 拿来重新编译了一下(就是用 rpm --rebuild 啦)现在用着很好哦!

另外还把 GNOME 十月版装上了,很爽的说!

还有一大堆新东东,如 gedit 0.6.1, balsa 0.6, xemacs 21.4, rpm 3.0.3,xmms 0.9.5, freeamp 2.0, mtv 1.1.0.6, realplay G2 beta(实在太多,数不过来了)

这样做的好处是不用考虑 tlc 中那些烦人的中文补丁的移植工作。

我唯一没有搞成的是 kdevelop, tlc 的 qt-1.44 库和它不兼容。谁要是能做个好事,编译一个stable link 的 kdevelop 给咱们用用就好了。

--※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.26.196]

——摘自:BBS水木清华

(出处:http://www.sheup.com/)


上一页 [1] [2] [3] [4]