歡迎來到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. 安裝locale
locale在中文化方面的作用極大, 但似乎沒有引起足夠的重視,
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 num 17, b2 e2 ca d4 4c 6f 63 61 6c 65 b5 c4 c8 ed bc fe 21
wcstombs() -> length 17, 測試Locale的軟件!
ptr 測試Locale的軟件!, mblen 1, wchar b2
ptr 馐訪ocale的軟件!, mblen 1, wchar e2
ptr 試Locale的軟件!, mblen 1, wchar ca
ptr 訪ocale的軟件!, mblen 1, wchar d4
ptr Locale的軟件!, mblen 1, wchar 4c
ptr ocale的軟件!, mblen 1, wchar 6f
ptr cale的軟件!, mblen 1, wchar 63
ptr ale的軟件!, mblen 1, wchar 61
ptr le的軟件!, mblen 1, wchar 6c
ptr e的軟件!, mblen 1, wchar 65
ptr 的軟件!, mblen 1, wchar b5
ptr 娜砑?, mblen 1, wchar c4
ptr 軟件!, mblen 1, wchar c8
ptr 砑?, mblen 1, wchar ed
ptr 件!, mblen 1, wchar bc
ptr ?, mblen 1, wchar fe
ptr !, mblen 1, wchar 21


在TLC4.02下locale為zh_CN:
MB_CUR_MAX 3
string 測試Locale的軟件!, length 17
mbstowcs() -> num 12, 6d4b 8bd5 4c 6f 63 61 6c 65 7684 8f6f 4ef6 21
wcstombs() -> length 17, 測試Locale的軟件!
ptr 測試Locale的軟件!, mblen 2, wchar 6d4b
ptr 試Locale的軟件!, mblen 2, wchar 8bd5
ptr Locale的軟件!, mblen 1, wchar 4c
ptr ocale的軟件!, mblen 1, wchar 6f
ptr cale的軟件!, mblen 1, wchar 63
ptr ale的軟件!, mblen 1, wchar 61
ptr le的軟件!, mblen 1, wchar 6c
ptr e的軟件!, mblen 1, wchar 65
ptr 的軟件!, mblen 2, wchar 7684
ptr 軟件!, mblen 2, wchar 8f6f
ptr 件!, mblen 2, wchar 4ef6
ptr !, mblen 1, wchar 21


這裡有個很怪的問題, 裝上這個包後,
在rh6.1下locale為zh_CN, 極不正常,
MB_CUR_MAX 3
string 測試Locale的軟件!, length 17
mbstowcs() -> num -1,
wcstombs() -> length 0,
ptr 測試Locale的軟件!, mblen -1, wchar 0

在rh6.1下locale為zh_TW.Big5, 要好些
MB_CUR_MAX 3
string 測試Locale的軟件!, length 17
mbstowcs() -> num -1,

ptr 測試Locale的軟件!, mblen 2, wchar 8046
ptr 試Locale的軟件!, mblen 2, wchar 5f78
ptr Locale的軟件!, mblen 1, wchar 4c
ptr ocale的軟件!, mblen 1, wchar 6f
ptr cale的軟件!, mblen 1, wchar 63
ptr ale的軟件!, mblen 1, wchar 61
ptr le的軟件!, mblen 1, wchar 6c
ptr e的軟件!, mblen 1, wchar 65
ptr 的軟件!, mblen 2, wchar 8154
ptr 軟件!, 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.0
zh-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_CN
export LANG=zh_CN
export 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