編者按:Linux 在中國如何發展?往何處發展?這是廣大中國Linux愛好者所熱切關注的。本站將連載中文Linux的開創者之一於明儉老師最近撰寫的長文《Linux 國際化本地化和中文化》。歡迎討論!
--------------------------------------------------------------------------
一 國際化、本地化和中文化
1. 國際化、本地化和多語言化的概念
2. 中文化
3. X11 國際化的歷史和級別
4. 國際化標准組織
5. 國際化的意義
二 Locale
1. Locale 的概念
2. 在X中使用Locale
3. 文化習俗的差別
三 X 窗口系統的國際化
1. 顯示的國際化
1. 字符集和編碼
2. 多字節字符(Multibyte)和寬字符(WideChar)的使用
3. Unicode
4. 字體(Font)和字體集(FontSet)
5. 信息的國際化
2. 輸入的國際化
3. 打印的國際化
4. 客戶程序間通訊的國際化
四 開發符合國際化標准的軟件
1. 開發國際化軟件
2. 使非國際化軟件國際化
五 目前中文化中存在的問題
1. 編碼動態切換的問題
2. 中文編碼自動識別問題
3. Linux上的中文平台到國際化的過渡
五 附錄
1. 寬字符處理函數函數與普通函數對照表
2. X 窗口系統下支持中文的函數庫
3. 支持多語言的典型軟件
4. 支持Unicode的軟件
--------------------------------------------------------------------------
一 國際化、本地化和中文化
1. 國際化、本地化和多語言化的概念
一般來說,"國際化"是指把原來為英文設計的計算機系統或應用軟件改寫為同時 支持多種語言和文化習俗的過程. 在軟件創作的初期,一般的編程語言,編譯,開 發都是盡支持英文的,為了適應更廣的語言和文化習俗,軟件有必要在設計結構 和機制上支持多語言的擴展特性,這一過程稱為國際化. 國際化僅僅是在軟件設 計上提供了使用多語言的可能.
"本地化"是指把計算機系統或者應用軟件轉變為使用並兼容某種 特定語言的過 程. 比如,把原來為英文設計軟件制作為支持中文的軟 件就是本地化的一種. 它 主要包括翻譯文本信息,界面信息,重新設計圖標等等.
語言和文化習俗因地域不同而差別很大. 對某一特定的地域的 語言環境稱為 "locale". 它不僅包括語言和貨幣單位,而且還包括數字標示格式,日期和時間 格式. 國際化了的軟件含有一個"locale" 的"參量",使用該"locale"參量便可以 設置某一區域所用的語言環境.
在國際化部分中只處理語言的部分叫"多語言化". 比如,一個 "多語言化"的軟件 可以同時管理諸如英語,法語,中日韓文,阿拉伯語等.
在英文中,國際化(Internationalization)被縮寫為I18N,即只取首尾兩個字 母,中間字母為18個. 同樣地,本地化(Localization) 縮寫為L10N,多語言化 (Multilingualization) 縮寫為M17N.
在今天,Internet把世界各地的計算機聯接了起來,共享信息和技術是必然的趨 勢和需要. 因此各地的計算機系統可以互相交流變得 越來越重要. 在Linux系統 向桌面普及的過程中,Linux軟件也需要國際化和本地化.
2. 中文化
"中文化"是一個很模糊的概念. 在Linux上的"中文化"它既包含使 軟件或系統國 際化,又包含使軟件本地化. 也就是說,"中文化"不僅僅 是只把軟件本地化這麼 簡單的事情,更重要的是因為Linux直接支持中文的軟件太少,做"中文化"必須 先做"國際化".
由於歷史的原因,現階段使用的中文又有簡體中文和繁體中文之分. 所使用的編 碼也不同. 支持中文的軟件應該同時支持簡體中文和繁體中文,這對軟件的國際 化提出了更高的要求.
1999年是中國Linux發展和普及過程中最重要的一年,其中湧現了許多制作中文 Linux發布版本的公司. 中文Linux的技術都是采取了中文化的捷徑----中文平 台. 盡管都是中文平台,但是具體實現的技術特點各不相同. 充分展示了中文平 台在Linux中文化過程中的魅力. 中文平台 在短期內發揮了巨大的作用,加速 Linux的中文化過程並推動Linux在中國的普及.
中文平台的主要技術特點是不用修改西文應用軟件,便可以顯示和輸入中文(有 的情況下會失效). 具體地說,就是利用自己的規范去修改X系統的底層函數. 從 修改的層次上分為(1)修改函數庫libX11.so,這種方式是動態修改,又稱外掛方 式. 外掛方式的實現可以是直接修改X11庫 或使用LD_PRELOAD載入動態庫修改. (2)修改X Server部分,又稱內嵌方式,它的實現也分為兩種,直接修改X Server 部分和建立虛擬Display(X傳輸協議的部分代理).
3. X11 國際化的歷史和級別
早期的X11R4版本中,僅僅含有支持單字節和雙字節字體的函數,所以它不能算是 國際化的函數庫. 此後,一個叫做"mltalk"的X協會成立並著手研究X窗口系統的 國際化問題. 眾多的X窗口系統供應商也 參與了該組織. 因為對國際化的研究剛 剛開始,所以mltalk提出的了 一個基本問題: 什麼是X窗口系統的國際化? 對它 的解釋也各不相同. 實際上,即使是現在,人們對國際化的定義仍然存在分歧, 分歧的焦點 主要集中於對軟件或系統怎樣程度的國際化才算是真正的國際化.
按國際化的級別來分,下列幾種情況都屬於國際化:
1. 語言可以切換. 在系統啟動時可以設置某種語言
2. 使用不同語言的軟件可以同時使用,在應用軟件啟動時可以設置某種語言
3. 使用不同語言的軟件可以同時使用,而且應用軟件的語言可以動態切換
4. 使用不同語言的軟件可以同時使用,而且在應用軟件中可以同時使用不同
語言
顯然,第(4)種國際化方式是最完善的方式,其次是第(3)種,第(2)種 和第(1)種. mltalk 最終決定使用第(3)種,原因是需要支持第(4)種的 X窗口系統供應商是少 數的. 從目前Linux上的國際化情況看,支持第(2),(3)種的國際化軟件是最常見 的,但是第(4)種軟件比較少見,而且應用的 意義不是很大.
基於上述觀點,X11R5 的目的是,創建支持不用重新編譯源代碼就可以適應於語 言環境的應用軟件開發平台. 確切地說,就是國際化 的結構是基於標准C函數 setlocale的. X11R5 確立了以下規范:
1. 切換語言的機制
2. 與語言無關的輸出接口
3. 與語言無關的輸入接口
4. 資源文件的國際化
5. X工具(Xt)的國際化
此後,以X11R5 為基礎,OSF/Motif 完成了國際化改造,並且成為被用戶廣泛接 受的高層圖形軟件庫,直到今天,一些大型的軟件仍然使用 Motif 作為基礎庫使 用,如Java,Netscape等. X11R5的規范在制定的同時,為了檢測規范的實用性, 開發了兩套樣本應用,即 Xsi 和 Ximp. 兩套應用在輸入協議上和對locale的支 持上都不同,從而為開發商帶來了不便.
X11R6 解決了X11R5中存在的問題,主要的變化有,
1. 定義了標准的輸入協議
2. Locale數據格式定義
3. 只采用了一種國際化工具的樣本應用模塊
在輸出上,X11R6增加了從由到左的的書寫方式,以支持阿拉伯語和希伯來語等, 增加了從上到下的書寫方式,以支持中文和日文等的書寫方向.
4. 國際化標准組織
這裡所說的國際化標准是國際化標准組織或一些相關組織制定的一些標准,而且 這些標准也會隨時間不同而經常更新. 國際化標准涉及到字符集,編碼,字體處 理,打印,文本繪制,用戶界面,語言輸入方法,數據交換,文化習俗,等方方面 面.
下面列出一些制定國際化標准的組織:
o Li18nux(Linux I18n)
o ANSI(American National Standards Institute)
o POSIX(Portable Operating System Interface for Computer
Environments)
o ISO(International Standards Organization)
o IEEE(Institute of Electrical and Electronics Engineers)
o Unicode Consortium
o Open Group(X Consortium and OSF)
o X/Open and XPG
其中,ANSI/ISO 制定了使用C編程語言編寫國際化軟件的通用接口. ISO 制定了 字符集標准和其它影響locale名字的標准. IEEE提供了一些國際化的通用庫函數 和設置管理不同locale的用戶命令. Open Group是Unix和X窗口系統的國際化標 准設立組織. Li18nux 是一個專門從事Linux上的軟件國際化 規范制定的組織.
5. 國際化的意義
國際化,特別是國際化中制定的標准,是當今開發國際化軟件所必須的. 它也是 軟件開發的必然趨勢. 遵循國際化標准,可以更高效地開發和調試軟件和移植軟 件,降低軟件的開發費用,使用戶更方便地使用軟件. 從國際環境來看,新開發 的基本的庫函數都會支持國際化標准,基於這些函數庫所開發的應用軟件理所當 然地支持國際化標准,同時有大批的Linux 愛好者把以前不符合國際化標准的軟 件進行了改造,使它們在一定程度上符合國際化標准. 使用國際化標准的軟件, 淘汰非國際化標准的軟件成為一種趨勢.
從國際化的發展歷史看,其中許多標准都有日本的商業機構參與,支持日文的軟 件變得越來越多,而從日語軟件移植為中文軟件相對於直接移植西文軟件相當容 易,有時甚至不用改動,這樣就節省了許多不必要的勞動. 反過來,符合國際化 標准的中文軟件又影響日語和韓語軟件,成滾雪球之勢向前發展. 其次,軟件商 的開發比較看好亞洲市場中的日本市場,在 Unix/Linux上的日語軟件或操作系統 一般是符合國際化標准的,所以兼容這一標准是十分必要的. 當然,目前的國際 化標准也存在不足之處,特別是對中文這一特殊語言(因為含有GB和Big5兩種不 能共存的編碼)的處理上,應該由中國人在原來的基礎上作相應的擴展.
對中文Linux來說,遵循國際化也是必然的趨勢. 在以中文平台為基礎的中文 Linux上,軟件移植已成為必須解決的問題,這個問題的最終解決方法就是遵循 同一標准,就目前來說遵循國際化標准是唯一的方法. 鑒於目前中文Linux上的 中文平台的混亂狀態,國際化標准是從無序到有序過渡的必然途徑.
軟件的國際標准化也為最終用戶帶來極大的好處,如同時支持簡體中文和繁體中 文,中文操作為雙字節操作,中文輸入能夠在更大的程度上使用標准輸入接口帶 來的好處,如輸入服務器的定位等交互式操作.
國際化的另一個特點是工作在應用軟件級別,所以國際化不會給X窗口系統帶來 不穩定性.
(第一章完)