歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

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




在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加上去。



(我先安裝的是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水木清華



(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水木清華



Copyright © Linux教程網 All Rights Reserved