next_inactive up previous

親手打造 GNU/Linux 中文環境 (一) - 用 RPM 檔案幫 RedHat-6.2 加上基本中文支援

謝東翰 <thhsieh@linux.org.tw>,小虫 <platin@ms31.hinet.net>

1 前言

近年來,因為網路上許多熱心先進的努力再加上 CLE 的出現,台灣的 GNU/Linux 同好們想要在 GNU/Linux 上面使用中文應該已經不會再感到困難與麻煩了吧,現在的 Linux 使用者鮮少需要再花費大量的時間去編譯程式,自己打造中文環境,實在是節省了寶貴的時間,也讓更多新手有辦法踏入 GNU/Linux 的世界裡面,不過話說回來,也有人覺得用現成的東西總是少了那麼一點樂趣吧 :) 其實這些『中文化的技術』並不是那麼的神秘與艱深困難,我們相信,假如能夠讓大家多多了解 GNU/Linux 上面現有中文環境的深層結構,假如可以有文件來提供目前 GNU/Linux 底下中文化方向的簡單說明,應當可以大大減少大家對 GNU/Linux 上中文環境的誤解,也可以吸引更多有興趣的人來參與、一起來投入 GNU/Linux 的中文化工作,這應當可以使得 GNU/Linux 未來在中文相關應用上的支援更加完整,這就是作者準備在這邊寫作一系列文件的初衷;現在大家看到的這分文件應該是一系列文章裡面的第一篇,本文將會先跟大家介紹一些基本的觀念跟術語,接著從歷史的角度開展,向大家介紹過去在 GNU/Linux 上的幾個中文化工作,並且利用現有的 rpm 檔案為 RedHat-6.2 加上基本的中文支援,希望能夠藉著這個實作的過程讓讀者得以體會到在一個英文環境中加上中文支援所牽涉到的諸般要素,往後作者們希望利用一到二個月一篇文章的規模,來為大家一一介紹中文顯示、輸入、列印、處理等等問題的詳細狀況跟各種可能的解決方案,並配合實際操作讓大家親手來打造整個中文環境。我們在這一系列文章中會假設讀者有基本的系統使用能力 (編輯檔案、編譯程式等等),而且對字元集 (character set) 跟編碼系統 (encoding) 也有一定的認識,所以這些東西文章裡面將會略過不提囉。

1.1 基本中文環境的要件

電腦發明的目的是為了拿來幫助人類處理各式各樣的資訊,對於身在台灣,以中文為母語的我們而言,要能夠在電腦系統上使用中文實在是一項很基本的需求,可惜的是,從西方文明發源的電腦系統是以支援英語為基礎而設計,對英文的支援是第一優先,對中文的支援就常常缺缺了,這種現象在 GNU/Linux 這種 Free OS 上面更是明顯,因為參與 GNU/Linux 系統開發的自由軟體工作者大多是使用英文或歐洲語系的程式設計師,所以過去整個 GNU/Linux 系統對中文使用者提供的支援其實是非常匱乏的,一般的 GNU/Linux 安裝套件也都缺少支援中文的版本,使用者需求殷切,但是卻遲遲無法滿足,導致 GNU/Linux 的中文化問題一直成為台灣 GNU/Linux 使用者長期以來最關心的核心議題,自 GNU/Linux 引進台灣有人使用開始,就持續有人在這上面努力,做出貢獻;這一兩年來 GNU/Linux 的環境有很大的改善,可是使用中文的很多問題卻還是存在,還需要更多的努力來加以克服才行。

繼續我們的討論之前,不妨先讓我們一起來想一想一個基礎中文平台要能夠做到那些事情,不妨就以編輯一份文件為例吧 (像我現在在這邊寫稿一樣),我們希望開啟的程式可以有友善的介面,有中文的選單跟說明 (中文訊息),還要有慣用的中文輸入法可以把中文打進去 (輸入),打字進去以後必須可以看到輸入的結果 (顯示),打字出錯了還要可以修改才行,必要的時後還得可以改變字型等等的 (處理),文章打完了,要能夠順利的把結果印出來 (列印);從這一個例子裡面我們就可以歸納出一個基本中文環境應該要可以做到下面這幾件事情:

上面的列表就是我們認為一個基本中文環境所要滿足的要件,也是我們在評估一個系統中文支援優劣時所用的基準,其實所謂的 "中文化",代表的就是在作為基礎的英文版作業系統上面做出修正的工作,目的不外是要能夠滿足上面所提到的這些要件罷了,這個列表的順序剛好是依照程式設計加以支援的困難程度排出來的,順序是從簡單到困難;提供中文的訊息跟介面所牽涉到的大多只是翻譯的工作,最為簡單,在顯示時要考慮到字型的搭配問題,在輸入時要有一個程式之間共用的輸入介面,這些就比較困難,而列印不只要作到應用程式跟列印伺服程式之間的整合,還需要有產生大點數美觀字體的能力,這件工作牽涉的問題更加複雜了,這幾點裡面要讓應用程式處理中文是最困難的一部分,例如中文正規表示法、中文字串搜尋等等,都是目前還難以解決的課題。

那麼,在目前的 GNU/Linux 環境底下,要用甚麼方法才可以讓系統支援上面提到的這些基本要件呢?

1.2 國際化與中文化

要讓系統支援中文,可能的解決方案不出三種,一是使用外掛式的中文系統,二是撰寫獨立的中文程式,三是利用系統上提供的國際化架構來支援。所謂的外掛式中文環境,指的是如同 DOS 底下的倚天中文或者 Windows 底下的雙橋中文這樣的系統,在 GNU/Linux 系統底下,外掛式的中文環境可以藉著 LD_PRELOAD 的機制來達成,只要設定 LD_PRELOAD 這個環境變數,適時的指到提供中文支援的動態函式庫去,就可以在程式執行時,動態的用支援中文的函式來替換掉原本不支援中文的函式,結果就可以讓不支援中文的程式變得可以顯示中文跟接受中文輸入了,例如舊版 CLE 使用的 xa+cv 或者是在 TurboLinux 裡面使用的 zhWinPro 都是屬於這類的程式。利用這種方式來提供中文的支援很簡單,很靈活,也不需要去修改程式的原始碼並重新編譯,可是這個方法卻沒辦法讓應用程式對中文作正確的 "處理",常見的例子是雖然加上了外掛的中文系統,可是編輯文字時在中文字上面按一次刪除鍵卻還是只能刪除半個中文,這是因為在應用程式內部仍然是把一個中文字當成兩個英文字來看待,而這顯然是不正確的,此外這個方式也不支援跟函式庫作靜態連結的程式,還常常會造成系統的不穩定,因此大家已經理解到這個方式無法解決根本問題,漸漸的捨棄這種外掛的方式,而用其他的方法提供中文支援了。

第二種方式是修改程式,直接讓每個程式都支援中文的使用,這種是最簡單也是最困難的方法,說它簡單,因為這件工作很直接,GNU/Linux 底下的程式又大多數都可以拿到程式的原始碼,只要對這些原始碼作修正,加入支援中文的部份,就可以支援中文的使用囉,例如很多人使用的中文 cpine 郵件程式就是用英文版 pine 的原始碼改出來的,其他如 cxterm 程式或者支援多種語言的 emacs 等等程式都是由應用程式自行提供中文支援的,這些程式對中文的支援很好,也都受到了大家的歡迎愛用,可是,使用者一旦離開這些有提供中文支援的程式以後就無法用中文了,一個 GNU/Linux 套件少說有五六百個程式套件,想要全面的中文化,必須要一個一個完整的對這些程式做出修改才行,這件工作在人力跟物力上都會是一個天文數字的投資,是不可能的事情,所以我們前面說這也是最困難的方法 :) 況且,因為編碼系統不一樣,這些程式拿到日本就要改一次日文版,拿到韓國也要再改一次韓文版,這種作法會使得資源重複浪費的部份十分嚴重,由此可見,靠獨立的程式來提供中文環境並不是個聰明的作法,必須要有更好的方式才行。

那麼甚麼才是這個更好的方式呢? "國際化" 可能是目前我們找得到的最好解答,國際化的英文名稱是 InternationalizatioN,這個英文單字的第一個字母 I 與最後一個字母 N 之間有 18 個字母,所以也常常被簡稱為 I18N。 I18N 是一種觀念跟目標,這個想法是要提供一個架構,讓同樣的程式碼可以適用在各種語文習慣跟編碼系統上面,程式設計人員只要利用這個架構的機制跟準則撰寫應用程式,就可以在不需重新編譯程式的情況下,自然的支援各式各樣的語言,不過為了要達成這樣的目標,作業系統必須提供一定程度的支援,特別是在各種的程式庫裡面都得有支援 I18N 的 設計才可以,這邊特別重要的就屬 C 程式庫以及 X 視窗系統的國際化設計了。過去,GNU/Linux 上的 C 程式庫跟 X 對國際化的支援都不完整,整個基礎環境還不成熟,所以多數的程式並沒有照著 I18N 的標準來撰寫,導致中文化的問題困難重重,這個現象在這一年來已經有了大幅的改善,目前國際上大家寫程式的時候已經有支援 I18N 的普遍共識了,主流的程式也都漸漸提供了 I18N 的支援,利用標準的 GNU/Linux 國際化架構來支援中文還是要改程式,不過這個改法是國際的主流,也可以保證投資可以有最大的獲益,所以我們認為這才是建構中文環境的正途,在後續的文章裡面我們將會一一跟大家介紹目前 GNU/Linux 底下 I18N 環境的實作方法,以及設計 I18N 程式所該注意的事項。

一般國際化架構設計的基本原則,是把程式處理會跟語文編碼相關的部份獨立出來,這些資料不只是編碼系統的定義,還包括該語文下的一些使用習慣,例如數字、日期、排序、貨幣的格式,以及翻譯的訊息等等... 這些跟語文環境有相關的資料,我們稱之為 "區域環境資料庫" (locale database, LOCALization Environment database),把這些資料分離出來以後,就可以定義一個跟語文編碼無關的介面給程式設計師使用,讓程式設計人員在設計程式時不必考慮對特定語文環境提供支援的細節,寫出來的程式就可以不限於支援特定語言,而是在程式執行的時候才依使用者的選擇的區域環境 (locale) 聯繫到不同的資料庫,進而提供該語文的支援。

I18N 只是提供可能用來支援中文的大架構,要能夠使用中文,還必須要在這個架構裡面加入對中文語文編碼的支援才可以,這個在國際化架構之下加入對某種特定語文支援的動作稱為 "區域化",英文稱為 LocalizatioN,因為 L 跟 N 之間有 10 個英文字母,也常被簡稱為 L10N,一般的 "中文化" 是泛指為應用程式加上中文支援的過程,不過我們這邊提到的中文化,事實上就是在國際化架構下面加入中文區域化支援的工作;就目前的 GNU/Linux 環境而言,當前在 GNU/Linux 上用來提供中文支援的國際化架構可說是已經大致完備,底層程式庫的中文區域化工作也都大致完成了,在這個架構之上已經可以提供一個不錯的中文環境可以用了,說起來,我們能有今日的中文環境可用,實在要感謝這些國際性程式開發組織 (glibc、XFree86) 有心重視亞洲語系使用者的需求,此外,長久以來許許多多網路上自由軟體作者的貢獻也是功不可沒,正就是因為有這許多前人不計個人報酬的努力,我們才能享受當前的中文環境。

1.3 漫漫長路中文化

GNU/Linux 是一套 Unix-like 的作業系統,很容易就可以繼承舊有 Un*x 環境底下的中文程式資源,因此,最早最早在 GNU/Linux 上面使用的中文程式,如 cxterm 等等,就是從 Un*x 下移植過來的軟體,不過大體來說,這些中文相關的程式資源是非常匱乏的,整個環境也非常的粗糙而難以使用,雖然早期資策會的種子計畫 (SEED) 跟一些國內廠商早就在 Un*x 系統上實作出完整的中文環境了,但是由於這些工作的成果都不是以自由軟體的形式發行,當時的 GNU/Linux 環境也還沒受到普遍的重視,所以這些很大一部分由國家資源挹注而做出來的中文化結果並沒有能夠轉移到 GNU/Linux 上面來,直至今日,GNU/Linux 上的中文化發展跟當初政府在 Un*x 系統中文化上的工作仍然還是脫節的,GNU/Linux 並沒能夠繼承當初政府投資在 Un*x 上建立出來的中文環境。

大約在 1994 年開始,隨著 GNU/Linux 使用者的逐漸增加,也漸漸開始有人在 GNU/Linux 上面撰寫中文相關程式了,當時如王佑中先生的中文終端機 (chdrv) 以及比較後來劉德華先生撰寫的中文視窗跟中文 X 輸入法 (crxvt + xcin) 都是台灣 GNU/Linux 使用者人人必備的程式,這一段時間裡面雖然程式資源已經漸漸豐富,可是大體上都還是一些獨立的程式套件,不只散落四處,各個軟體之間跟整個系統也缺乏整合,讓一般使用者往往需要四處到網路上蒐羅軟體,然後自己編譯安裝才可以使用,這個現象一直要到交大計中發行了 "雲觀 CDROM" 才開始有了變化。

1994 年的 "雲觀" 可算是國人自行整理 GNU/Linux 安裝套件的濫觴,這是當時在交大的劉大川、黃界木堅、李欣叡、李建達以及張傑生等幾位前輩先進的努力結果,是以當時最流行的安裝套件 Slackware 為基礎,加上其他軟體資源以及中文相關程式而整理出來的,1994 年 7 月的雲觀一與同年 12 月的雲觀三在當時的台灣 GNU/Linux 使用者社群之間也的確掀起了一陣熱潮 (雲觀二是 PD & Shareware for DOS/Windows/OS2,跟 GNU/Linux 無關),筆者第一次安裝的 GNU/Linux 就是雲觀三的系統,說起來,就是雲觀引領我入門的呢,可惜,這個計畫因人事的變動而沒能推出後續的雲觀四,同時期有幾位 GNU/Linux 高手也轉往 *BSD 發展,例如李建達先生從整理雲觀四的 FreeBSD 版 CD 發展到後來撰寫了 "黑皮書",在台灣引領出一波使用 FreeBSD 的浪潮,對國內 Free OS 上的整合系統發展也有很大的貢獻,令人遺憾的是,後續的雲觀 GNU/Linux 就再也沒有出現過了。

時間之流繼續前進,王佑中先生這位在 GNU/Linux 上發展中文環境的先驅除了持續驚人的程式產量以外,在 1995 年底於第三波出版社發行了『Linux 中文應用手冊』一書,這可以算是第二個在 GNU/Linux 上整理中文環境的努力成果,王大哥在這本書裡面對當時在 GNU/Linux 上使用中文會遇到的問題做了一個綜整的探討,對一些尚未解決的問題也提出了許多觀點,直到今日,這本書裡面的許多資料都還是很有參考價值的,雖然這本書並沒有產生一套真正的整合安裝套件出來,不過這些資料對當時有興趣在 GNU/Linux 底下致力中文化工作的人產生了深遠的影響,在某種程度上,也促成了後來更多人投入參與 GNU/Linux 的中文化工作。

1997 年以後,GNU/Linux 本身的系統環境更加成熟,使用者也大幅度的增加,一般人不再僅僅將 GNU/Linux 當成高階工作站的代用品而已,除了把 GNU/Linux 當成網路伺服器使用以外,大家也漸漸希望 GNU/Linux 可以滿足平常上網、文書工作的需求,於是乎建立一個整合的中文環境已經變成了一項緊急的要務,網路上也不時有人發起打造中文環境的運動,在這樣的環境以及 RedHat 系統逐漸流行的背景之下,1998 年 6 月開始出現並延續到現在的 "中文 GNU/Linux 延伸安裝套件計畫" (CLE, Chinese GNU/Linux Extensions) 成功的整理了網路上各式各樣的中文相關程式,提供了一套中文環境,滿足了大部份人在 GNU/Linux 之上使用中文的需求;CLE 在目前支援了 RedHat、Mandrake、SuSE、Slackware 等數種安裝套件,在今年三月由黃志偉、李建秋等人整理出來的 CLE 0.9 已經是一個完整國際化,可以滿足大部份基本中文環境需求的完善系統了,回顧前程,除了在網路上的這些自由軟體工作者的自發性貢獻之外,國內的 GNU/Linux 廠商是一直遲到去年才開始參與建造 GNU/Linux 中文環境的工作,大同、百資以 CLE 為基礎開發了自己的中文化安裝套件,此外還有網虎公司推出國際版的 XLinux,大體說來,國內 GNU/Linux 中文環境的建立到目前為止都還是整個 GNU/Linux 社群自發性發展的成果,較少有台灣本土商業力量主導開發出來的貢獻,身為一個能夠得以在 GNU/Linux 底下撰寫這篇文件的受益者,實在是應該向這些網路先進們致上深深的謝意。

在台灣這個島嶼之外,國際上其他區域的 GNU/Linux 使用者也一直積極的參與讓 GNU/Linux 支援當地語文的工作,這裡面日文環境是發展的最成熟也最完整的,許多重要的程式都是日本人寫作出來的,如提供 TTF 支援的 X-TT (X TrueType Server) 程式,此外,從去年以來在大陸如雨後春筍般冒出的各家 GNU/Linux 廠商也漸漸嶄露頭角,或多或少有了一些貢獻,近年來國際上的軟體業者更是已經有了一個普遍的共識,在程式寫作的時候都會考慮到不同語文的相容問題,並且積極推出支援亞洲語系的 GNU/Linux 版本,例如 RedHat-6.2 已經支援日文,Mandrake-7.0 更號稱支援包括中文在內的五十多種語言,幾個重要的國際程式組織,如 GNU、XFree86 等等,也都把程式的國際化當成重要的工作在推動,在 XFree86-4.0 跟未來的 glibc-2.2 架構之下,GNU/Linux 底下的國際化環境已經堪稱成熟,可以預見的是,未來每個主要的 GNU/Linux 安裝套件都將會直接提供繁體中文的完整支援,就如同 Microsoft 的視窗系統一樣,中文的顯示、輸入等等將不會再是問題,大家會轉向發展更高階的應用技術,例如中文手寫、語音輸入,中文排版系統等等。

在下面一節裡面,我們便利用一些現成的 RPM 檔案來替英文版的 RedHat-6.2 系統加上基本的中文支援,大家可以看到,在 GNU/Linux 系統的國際化架構之上,我們其實只要再做很少的一些修改就可以賦予 GNU/Linux 使用中文的能力了。

2 利用 RPM 檔案在英文版 RedHat-6.2 上建立基本中文環境

今年的三月底,RedHat 公司正式發佈了最新的 RedHat Linux 版本,RedHat-6.2,相信已經有不少讀者把它裝起來了吧,這個版本的 RedHat 跟前版比較起來有不少改進,可是卻仍然還沒有提供對中文環境的支援,在苦苦等待 RedHat-6.2 + CLE 的出現以外,可不可以自己來在上面加上基本的中文環境呢?

這個答案,當然是可以的。其實利用 CLE 製作出來的 rpm 檔案在 RedHat-6.2 上面加上中文支援是一點都不困難的工作,這一節我們就來實地操作一下 :) 讀者在安裝好 RedHat-6.2 以後,只要按照下面幾個步驟操作,就可以替 RedHat-6.2 加入不錯的中文環境囉。

2.1 下載所需套件

正式動手之前,我們需要透過網路來取得所需的應用程式,請讀者先利用 FTP 連線到有放置 CLE v0.9 的網站去抓取下面列出的這些程式,國內有放置 CLE 的網站眾多,讀者可以參考 http://cle.linux.org.tw/CLE/mirrors.shtml 裡面列出的站台,挑一個最接近,網路連線最快的來用,我們這邊以 ftp://ftp.nsysu.edu.tw 為例,讀者用 FTP 連線上去以後,可以在 /Linux/CLE/v0.9/RedHat/i386/RedHat/RPMS/ 底下下載底下列出的這些 rpm 檔案:

XFree86-3.3.6-12CLE.i386.rpm

XFree86-xfs-3.3.6-12CLE.i386.rpm

bg5ps-1.3.0-1.i386.rpm

libtabe-0.1-8CLE.i386.rpm

rxvt-2.7.3-1CLE.i386.rpm

taipeifonts-1.2-14.noarch.rpm

ttf-arphic_bming-2.11-1.noarch.rpm

ttfm-0.9-9.i386.rpm

xa+cv-0.7-pre1.i386.rpm

xcin-2.5.2-0.pre2.i386.rpm

zh-trans-0.9-10.noarch.rpm
接著我們還需要抓到一個 srpm 檔才行,底下這個檔案讀者可以在 /Linux/CLE/v0.9/RedHat/SRPMS/CLE-SRPMS/ 目錄下找到,請把它抓回來吧:

locale-zh-0.9-1.src.rpm
完成抓檔的動作以後請登入 root 的身份,切換到放置這些檔案的目錄底下,因為接下來會動到 X 的設定檔,所以繼續後續的指令之前,我們最好先切換到文字模式下使用,用圖形介面登入的讀者請執行下面指令來切換到文字模式吧:

init 3

2.2 安裝中文區域化環境

在整個國際化架構中,C 程式庫的國際化以及裡面的區域化環境支援是最基本的要件,雖然 RedHat-6.2 內含的 C 程式庫 (glibc-2.1.3) 已經支援雙位元組編碼系統的國際化,可以提供對 BIG5 碼的基本支援,可是在原始的 glibc 套件裡面缺少了 BIG5 碼的區域環境資料庫 (locale database),所以我們必須要自行動手加入中文的區域化資料才行,這個區域環境資料庫的格式在不同版本的 glibc 裡面稍有不同,所以我們不能夠直接拿 CLE 編譯好的資料來用,必須從原始檔案編譯才行。

讀者抓回的 locale-zh-0.9-1.src.rpm 這個檔案便是中文區域環境資料庫的原始 rpm 檔,在抓回檔案以後,請照著下面的指令操作:

rpm --rebuild locale-zh-0.9-1.src.rpm

rpm -Uhv /usr/src/redhat/RPMS/i386/locale-zh-0.9-1.i386.rpm
第一行指令是用 "rpm --rebuild" 指令重新編譯產生 rpm 檔案,產生的 rpm 檔會放到 /usr/src/redhat/RPMS/i386 底下,接著只要用 "rpm -ihv" 來把編譯好的檔案裝上,如此便完成安裝了。

接著要更改 RedHat 的設定,讓系統使用我們剛剛安裝的區域環境。上述的 rpm 檔案會為您裝好 zh_TW.Big5 這個區域環境資料庫,這類區域環境的稱呼是有一定定義的,這邊的 "zh" 是 "中文" 的意思,"TW" 是區域代碼,表示 "台灣","Big5" 則是使用的編碼了;請用您習慣使用的文字編輯軟體修改 /etc/sysconfig/i18n 這個檔案,把 LANG="en_US" 的 "en_US" 改成 "zh_TW.Big5",如此一來系統就會以 zh_TW.Big5 作為系統預設的環境,讀者登出再重新登入系統以後,請執行 locale 指令看看,應該可以看到下面這些訊息,表示我們已經成功把系統改成預設成使用 zh_TW.Big5 的區域了:

LANG=zh_TW.Big5

LC_CTYPE="zh_TW.Big5"

LC_NUMERIC="zh_TW.Big5"

LC_TIME="zh_TW.Big5"

LC_COLLATE="zh_TW.Big5"

LC_MONETARY="zh_TW.Big5"

LC_MESSAGES="zh_TW.Big5"

LC_ALL=
讀者還可以執行 grep -help 看看,是不是看到一堆亂碼了呢? 這些亂碼是中文的訊息,表示您已經進入了中文 zh_TW.Big5 的使用環境了。

2.3 為 X 加入中文字型支援

接下來處理 X 的部份,XFree86 自從 3.3.4 版以後就直接提供了 zh_TW.Big5 的區域化環境,所以我們不必費心再安裝 X 的中文區域化資料了,可是 XFree86 並沒有提供中文字字型,我們還必須要為 X 安裝中文字型才可以,讀者抓回的 taipeifonts 套件裡面就包含了 16 點、20 點以及 24 點三套中文點陣字體,直接把這個 rpm 檔案裝上就有中文字型可以使用了:

rpm -ihv taipeifonts-1.2-14.noarch.rpm
這個套件裡面包含了 16 點、20 點以及 24 點三套中文點陣字體,足供一般情況顯示中文之用,可是目前有許多程式都會要求使用 TTF 字型,所以我們最好還是幫 X 加上中文的 TTF 字型支援;RedHat-6.2 內附的 X 視窗系統已經支援 TTF 字型,不過只限於對英文與歐洲語系的支援,並無法完善的支援中文,所以我們必須要拿 CLE XFree86 套件裡面的字型伺服程式 (X font server) 來使用,為我們的 X 環境提供中文 TTF 字型的支援,這個字型伺服程式還會用到一些額外的函式庫跟程式檔案,這些檔案放在 CLE 的 XFree86-3.3.6-12CLE.i386.rpm 裡面,可是因為 CLE 的 XFree86 rpm 檔案的版本比較舊,所以我們並不更新整個 rpm 檔案,請讀者用下面指令把需要的檔案抽出來就好了,記住下面全部是一行指令,不要分成兩行了喔:

rpm2cpio XFree86-3.3.6-12CLE.i386.rpm | ( cd / ; cpio -ivumd usr/share/fonts/install/* usr/X11R6/lib/modules/codeconv/* usr/X11R6/lib/libfont.so* )
解出來的檔案可能有一些權限問題,而且新的函式庫也有用 ldconfig 重新設定的必要,所以請馬上接著執行下面兩行指令:

chmod a+rx /usr/X11R6/lib/modules/codeconv

ldconfig
接著就可以成功裝上 xfs 跟其他 TTF 字型相關的 rpm 檔案了:

rpm -Uhv -force -nodeps XFree86-xfs-3.3.6-12CLE.i386.rpm

rpm -ihv ttfm-0.9-9.i386.rpm

rpm -ihv ttf-arphic_bming-2.11-1.noarch.rpm
到這邊 X 視窗系統 TTF 支援相關的程式應該都已經到定位了,接下來請讀者修改 /etc/X11/XF86Config,把裡面 /usr/X11R6/lib/X11/fonts/TrueType 這個 FontPath 拿掉,讓 X Server 完全由 xfs 取得字型,然後修改 /etc/X11/fs/config,把 /usr/X11R6/lib/X11/fonts/TrueType 加到 catalogue 的第二行,變成如圖 1 這個樣子。

Figure 1: 修改 /etc/X11/fs/config 的字型路徑
\resizebox*{8cm}{4.8cm}{\includegraphics{xfs-config.eps}}

接著重新啟動 xfs,讓我們修改過的設定生效:

/etc/rc.d/init.d/xfs restart
完成以後,讀者可以用 "startx - -deferglyphs 16" 進入 X 視窗系統試試看,這裡 "-deferglyphs 16" 的參數會讓 X 延遲產生 16bit 字型的時間,不在第一次載入字型的時候就全部一次產生,而在真正使用到字型的時候才產生,可以讓載入中文字型的時候不會 hang 住,可以加快中文字顯示的速度;進入 RedHat 預設的 GNOME 環境以後,您可能會看到一些亂碼,這個我們等一下會處理,沒有關係,進入 X 以後請開啟一個視窗,用 "xlsfonts | grep big5" 檢查看看是不是已經有裝上了一大堆中文字型,假如您只找到 16、20、24 三種大小的字體,那可能您的 TTF 字型沒裝好,請利用下面幾個指令重裝 X 的 TTF 字型:

/usr/share/fonts/install/xttfm.ttfm -remove bsmi00lp.ttf

/usr/share/fonts/install/xttfm.ttfm -add /usr/share/fonts/ttf/bsmi00lp.ttf

/usr/share/fonts/install/xttfm.ttfm -setdefault_ming bsmi00lp.ttf
確定字型安裝無誤以後請修改 /usr/X11R6/bin/startx 這個檔案,在倒數幾行可以找到 "xinit $clientargs - $server.....",請在這一行的最後面加上 "-deferglyphs 16",讓每次 startx 自動 deferglyphs 16,不必每次都要手動輸入;用 gdm 一開機就進入圖形化登入介面的朋友要更改 /etc/X11/gdm/gdm.conf 這個檔案,把倒數第二行改成 "0=/usr/bin/X11/X -deferglyphs 16"。

2.4 安裝其他中文程式

現在可以一一把其他的中文相關程式裝上去了,首先安裝中文輸入法:

rpm -ihv libtabe-0.1-8CLE.i386.rpm

rpm -ihv xcin-2.5.2-0.pre2.i386.rpm
裝好以後就可以在 X 底下用 xcin 輸入中文了,讀者可以參考 "/usr/doc/xcin-2.5.2/UserGuide" 裡面的說明來了解 xcin 的詳細使用方法。接著我們安裝中文視窗,這個程式會跟系統原有的 rxvt 相衝,所以要加上 -force 參數才可以順利安裝:

rpm -Uhv -force rxvt-2.7.3-1CLE.i386.rpm
還有中文的訊息檔案,讀者當然希望在您的系統上面可以看到中文的訊息吧:

rpm -ihv zh-trans-0.9-10.noarch.rpm
xa+cv 程式,這是一個外掛式的中文支援程式,遇到無法使用正規國際化架構顯示中文的程式時,就可以利用 cv 來達成顯示中文的目的,例如 netscape 跟 KDE 程式:

rpm -ihv xa+cv-0.7-pre1.i386.rpm
最後再裝上簡單的中文列印程式:

rpm -ihv bg5ps-1.3.0-1.i386.rpm
bg5ps 這支程式可以利用 TTF 字型列印中文文件跟網頁,例如 "cat big5text | bg5ps | lpr" 指令可以列印 big5text 這個含有中文字的文字檔案,如果在 netscape 的列印指令裡面把 "lpr" 換成 "bg5ps -nps y | lpr",就可以列印中文網頁了,詳細的使用方法,請參考 /usr/doc/bg5ps-1.3.0 底下的說明檔案吧。

有了這幾個程式的幫助,在 GNU/Linux 底下顯示、輸入、列印中文都不再是問題囉 :)

2.5 應用程式的中文支援

上面的這些步驟已經為您在 RedHat-6.2 底下建立好了一個基本的中文環境了,可是為了要能夠順利使用這個環境,一些程式的設定檔都還要作一些小小的修正,例如更改字型設定或者語言環境等等的,舉例來說,enlightenment、Window Maker、Icewm 等視窗管理員都要作一些設定才可以順利顯示中文,我們在這邊只為大家說明一下 gtk+ 的字型集 (FontSet) 設定還有替 Netscape 加上完整中文顯示支援的方法,其他程式的部份,就請讀者在遇到問題的時候參考一下應用程式的使用說明,照著說明進行適當的修正就可以了。

2.5.1 GNOME 程式的中文支援

GNOME 程式是基於 gtk+ 這個函式庫開發出來的,gtk+ 的國際化一直做的不錯,所以在我們的環境底下,大部分的 GNOME 程式都可以正常使用中文了,可惜 RedHat-6.2 附的 gtk+ 有一些小小的問題,沒辦法抓到正常的設定檔案,讀者必須要執行下面這個指令來解決在 GNOME 環境底下中文變成亂碼的問題:

ln -s /etc/gtk/gtkrc.zh_TW.Big5 /etc/gtk/gtkrc.zh_TW.big5
上面這行指令把中文的 gtkrc.zh_TW.Big5 設定檔連一分到小寫的 gtkrc.zh_TW.big5 去,讓 gtk+ 程式可以抓到中文相關的設定,就可以在 GNOME 環境中看到中文囉 (如圖 2),這個設定檔的內容如下:

# $(gtkconfigdir)/gtkrc.zh_TW

#

# This file defines the fontsets for Chinese language (ch) using

# the traditional chinese Big5 encoding as used in Taiwan (TW)

#

# 1999, Pablo Saratxaga <srtxg@chanae.alphanet.ch>

#

style "gtk-default-zh-tw" {

fontset = "-adobe-helvetica-medium-r-normal-14-*-*-*-*-*-iso8859-*,\ -*-*-medium-r-normal-14-*-*-*-*-*-big5-0"

}

class "GtkWidget" style "gtk-default-zh-tw"
這個檔案裡面設定了 zh_TW.Big5 環境要用到的字型集,上面的設定表示在使用 zh_TW.Big5 環境的時候會需要用到兩種字體,一個是 iso8859-* 的字體,用來顯示英文字,一種是 big5-0 的字體,用來顯示 BIG5 中文。讀者可以把這個設定檔複製一份到 ~/.gtkrc,更改裡面的設定,就可以在 GNOME 環境底下使用自己喜歡的字體了。

Figure 2: GNOME 環境下的中文
\resizebox*{10.24cm}{7.68cm}{\includegraphics{gnome-1.eps}}

2.5.2 Netscape 的中文支援

Netscape 是 GNU/Linux 底下人人需要用到的軟體,也支援 I18N,可以用 xcin-2.5 在 Netscape 裡面作中文的輸入,可惜它在某些地方的中文顯示有問題,例如在遇到網頁表單的選單跟按鈕跟傳訊家的列表就沒辦法正常顯示中文,所以我們必須讓 Netscape 配合 xa+cv 使用,以讓中文正確顯示。

讀者只要在 /usr/bin/netscape 這個 script 檔案的前面加上環境變數的設定來呼叫 cv,就可以在 Netscape 的表單裡面看到中文,請讀者把 /usr/bin/netscape 的開頭加兩行 export 指令,改成如下所示:

#!/bin/sh

export XA_CVMODE=a

export LD_PRELOAD=/usr/share/chinese/xa+cv/cv.so

netscape=""
以後用 "netscape" 啟動程式,就可以順利在表單裡面看到中文囉 (如圖 3)。

Figure 3: Netscape Messanger 底下的中文顯示跟輸入
\resizebox*{10.24cm}{7.68cm}{\includegraphics{netscape-1.eps}}

3 好戲在後頭

看過上一節的說明,讀者是不是已經輕輕鬆鬆的為 RedHat-6.2 加上中文環境了呢?我們在這邊提供的方法,其實就是在 GNU/Linux 的國際化架構之上,加上 "zh_TW.Big5" 的區域環境支援罷了,用術語來說,就是在 RedHat-6.2 的 I18N 架構下作 L10N 的工作 - 加上區域環境資料庫、加上字型支援、加上輸入法程式以及列印程式,然後再對個別軟體作必要的修改,對不支援 I18N 的軟體則進一步用外掛的中文程式 (xa+cv) 做修正... 經過幾個簡單的步驟以後,您就可以用 RedHat-6.2 上 BBS,也可以瀏覽中文網頁、編輯、列印中文文件了,這幾個步驟也正好反應出在一個國際化環境底下支援某種語言編碼的必要需求,其實並不只限於針對 RedHat 喔,對於其他版本的 GNU/Linux (甚至 *BSD),也可以用類似的方法加上基本的中文支援,幾個目前檯面上比較用心在做國際版 GNU/Linux 的廠商,如 TurboLinux、Mandrake 等等,也都是在一模一樣的架構跟作法下建構中文環境的,有心的讀者不妨在自己慣用的其他 GNU/Linux 版本上實作一番。

這篇文章說明了利用 RPM 檔案為英文版的 RedHat-6.2 加上基本中文支援的方法,目的是希望藉著這個過程,讓大家能夠實際的認識到這幾個中文環境的基本要件,前面已經說過,這篇文章是一系列文件的第一篇,接下來的幾篇文章裡面我們將不再把內容專注在某個特定的 GNU/Linux 安裝套件上面了,我們希望把關心的課題聚焦在整個 GNU/Linux 系統的 "基本中文環境" 之上,除了跟大家談一談現在 GNU/Linux 底下的國際化架構以外,還會跟大家分享一下面臨中文化相關問題的時候,現存有那些解決方法,我們也會強調在設計一個國際化程式的時候所要注意的事項,文章中我們會假設讀者都有基本的 GNU/Linux 系統使用能力,所以將不會去教大家程式設計的語法,此外我們也不準備碰觸 "如何撰寫中文 Office 程式" 這樣的進階課題,對進一步資料有興趣的讀者,不妨先參考一下 CLE 網站裡面的連結 (http://cle.linux.org.tw/CLE/i18nlink.shtml),接下來的幾個月裡面,我們將會跟大家介紹底下這些課題的細節,請有興趣的讀者拭目以待,也希望我們能夠有時間跟毅力來完成這一系列的文章:

除了把個人經驗跟手邊的資料跟大家分享以外,我們希望這一系列的文件可以在這個地方引發大家的討論,讓大家一起來對當前 GNU/Linux 底下的中文環境集思廣益一下,除了要拜託大家多多指正謬誤跟誤解之處外,還請大家一起來關心,提出您的需求跟可能的解決之道,對國際化的方向跟架構有心得的讀者,歡迎寫 e-mail 給作者,我們將會盡力回答大家的問題,並找適當的版面來刊出,這邊還要特別感謝 PC2000 的王小姐跟 SJH 大哥熱情的提供這塊版面,讓我們得以把自己的一些粗淺心得發表出來,王小姐的催搞,可能將會是懶惰的作者完成這一系列文件最大的動力喔。


next_inactive up previous
Yuan-Chung Cheng
2000-04-14