天天看點

Linux 國際化本地化和中文化

于明儉 [中國Linux論壇] [北京TurboLinux公司]

 一 國際化、本地化和中文化

 國際化、本地化和多語言化的概念

 一般來說, "國際化"是指把原來為英文設計的計算機系統或應用 軟體改寫為同時支援多種語言和文化習俗的過程. 在軟體創作的初期, 一般的程式設計語言,編譯,開發都是盡支援英文的, 為了适應更廣的語言 和文化習俗, 軟體有必要在設計結構和機制上支援多語言的擴充特性, 這一過程稱為國際化. 國際化僅僅是在軟體設計上提供了使用多語 言的可能.

 "本地化"是指把計算機系統或者應用軟體轉變為使用并相容某種 特定語言的過程. 比如, 把原來為英文設計軟體制作為支援中文的軟 件就是本地化的一種. 它主要包括翻譯文本資訊,界面資訊,重新設計 圖示等等.

 語言和文化習俗因地域不同而差别很大. 對某一特定的地域的 語言環境稱為"locale". 它不僅包括語言和貨币機關, 而且還包括 數字标示格式, 日期和時間格式. 國際化了的軟體含有一個"locale" 的"參量", 使用該"locale"參量便可以設定某一區域所用的語言環境.

 在國際化部分中隻處理語言的部分叫"多語言化". 比如, 一個 "多語言化"的軟體可以同時管理諸如英語,法語,中日韓文, 阿拉伯語等.

 在英文中, 國際化(Internationalization)被縮寫為I18N, 即隻 取首尾兩個字母, 中間字母為18個. 同樣地, 本地化(Localization) 縮寫為L10N, 多語言化(Multilingualization) 縮寫為M17N.

 在今天, Internet把世界各地的計算機聯接了起來, 共享資訊和 技術是必然的趨勢和需要. 是以各地的計算機系統可以互相交流變得 越來越重要. 在Linux系統向桌面普及的過程中, Linux軟體也需要國 際化和本地化.

 中文化

 "中文化"是一個很模糊的概念. 在Linux上的"中文化"它既包含使 軟體或系統國際化,又包含使軟體本地化. 也就是說, "中文化"不僅僅 是隻把軟體本地化這麼簡單的事情, 更重要的是因為Linux直接支援中 文的軟體太少, 做"中文化"必須先做"國際化".

 由于曆史的原因, 現階段使用的中文又有簡體中文和繁體中文之 分. 所使用的編碼也不同. 支援中文的軟體應該同時支援簡體中文和 繁體中文, 這對軟體的國際化提出了更高的要求.

 1999年是中國Linux發展和普及過程中最重要的一年, 其中湧現了 許多制作中文Linux釋出版本的公司. 中文Linux的技術都是采取了中文 化的捷徑----中文平台. 盡管都是中文平台, 但是具體實作的技術特點 各不相同. 充分展示了中文平台在Linux中文化過程中的魅力. 中文平台 在短期内發揮了巨大的作用, 加速Linux的中文化過程并推動Linux在中 國的普及.

 中文平台的主要技術特點是不用修改西文應用軟體, 便可以顯示和 輸入中文(有的情況下會失效). 具體地說, 就是利用自己的規範去修改 X系統的底層函數. 從修改的層次上分為(1)修改函數庫libX11.so, 這種 方式是動态修改, 又稱外挂方式. 外挂方式的實作可以是直接修改X11庫 或使用LD_PRELOAD載入動态庫修改. (2)修改X Server部分, 又稱内嵌方式, 它的實作也分為兩種, 直接修改X Server部分和建立虛拟Display(X傳輸 協定的部分代理).

 X11 國際化的曆史和級别

 早期的X11R4版本中, 僅僅含有支援單位元組和雙位元組字型的函數, 是以它不能算是國際化的函數庫. 此後, 一個叫做"mltalk"的X協會 成立并着手研究X視窗系統的國際化問題. 衆多的X視窗系統供應商也 參與了該組織. 因為對國際化的研究剛剛開始, 是以mltalk提出的了 一個基本問題: 什麼是X視窗系統的國際化? 對它的解釋也各不相同. 實際上, 即使是現在, 人們對國際化的定義仍然存在分歧, 分歧的焦點 主要集中于對軟體或系統怎樣程度的國際化才算是真正的國際化.

 按國際化的級别來分, 下列幾種情況都屬于國際化:

 語言可以切換. 在系統啟動時可以設定某種語言

 使用不同語言的軟體可以同時使用, 在應用軟體啟動時可以 設定某種語言

 使用不同語言的軟體可以同時使用, 而且應用軟體的語言可 以動态切換

 使用不同語言的軟體可以同時使用, 而且在應用軟體中可以 同時使用不同語言

 顯然, 第(4)種國際化方式是最完善的方式, 其次是第(3)種,第(2)種 和第(1)種. mltalk 最終決定使用第(3)種, 原因是需要支援第(4)種的 X視窗系統供應商是少數的. 從目前Linux上的國際化情況看, 支援第(2), (3)種的國際化軟體是最常見的, 但是第(4)種軟體比較少見, 而且應用的 意義不是很大.

 基于上述觀點, X11R5 的目的是, 建立支援不用重新編譯源代碼 就可以适應于語言環境的應用軟體開發平台. 确切地說, 就是國際化 的結構是基于标準C函數setlocale的. X11R5 确立了以下規範:

 切換語言的機制

 與語言無關的輸出接口

 與語言無關的輸入接口

 資源檔案的國際化

 X工具(Xt)的國際化

 此後, 以X11R5 為基礎, OSF/Motif 完成了國際化改造, 并且成為 被使用者廣泛接受的高層圖形軟體庫, 直到今天, 一些大型的軟體仍然使用 Motif 作為基礎庫使用, 如Java, Netscape等. X11R5的規範在制定的同時, 為了檢測規範的實用性, 開發了兩套樣本應用, 即 Xsi 和 Ximp. 兩套應用 在輸入協定上和對locale的支援上都不同, 進而為開發商帶來了不便.

 X11R6 解決了X11R5中存在的問題, 主要的變化有,

 定義了标準的輸入協定

 Locale資料格式定義

 隻采用了一種國際化工具的樣本應用子產品

 在輸出上, X11R6增加了從由到左的的書寫方式, 以支援阿拉伯語和 希伯來語等, 增加了從上到下的書寫方式, 以支援中文和日文等的書寫.

 國際化标準組織

 這裡所說的國際化标準是國際化标準組織或一些相關組織制定的一些标準, 而且這些标準也會随時間不同而經常更新. 國際化标準涉及到字元集,編碼, 字型處理,列印,文本繪制, 使用者界面, 語言輸入方法, 資料交換, 文化習俗, 等方方面面.

 下面列出一些制定國際化标準的組織:

 Li18nux(Linux I18n)

 ANSI(American National Standards Institute)

 POSIX(Portable Operating System Interface for Computer Environments)

 ISO(International Standards Organization)

 IEEE(Institute of Electrical and Electronics Engineers)

 Unicode Consortium

 Open Group(X Consortium and OSF)

 X/Open and XPG

 其中, ANSI/ISO 制定了使用C程式設計語言編寫國際化軟體的通用接口. ISO 制定了字元集标準和其它影響locale名字的标準. IEEE提供了一些國際化的 通用庫函數和設定管理不同locale的使用者指令. Open Group是Unix和X視窗 系統的國際化标準設立組織. Li18nux 是一個專門從事Linux上的軟體國際化 規範制定的組織.

 國際化的意義

 國際化, 特别是國際化中制定的标準, 是當今開發國際化軟體所必須 的. 它也是軟體開發的必然趨勢. 遵循國際化标準, 可以更高效地開發和 調試軟體和移植軟體, 降低軟體的開發費用, 使使用者更友善地使用軟體. 從國際環境來看, 新開發的基本的庫函數都會支援國際化标準, 基于這些 函數庫所開發的應用軟體理所當然地支援國際化标準, 同時有大批的Linux 愛好者把以前不符合國際化标準的軟體進行了改造, 使它們在一定程度上 符合國際化标準. 使用國際化标準的軟體, 淘汰非國際化标準的軟體成為 一種趨勢.

 從國際化的發展曆史看, 其中許多标準都有日本的商業機構參與, 支援 日文的軟體變得越來越多, 而從日語軟體移植為中文軟體相對于直接移植 西文軟體相當容易, 有時甚至不用改動, 這樣就節省了許多不必要的勞動. 反過來, 符合國際化标準的中文軟體又影響日語和韓語軟體, 成滾雪球之 勢向前發展. 其次, 軟體商的開發比較看好亞洲市場中的日本市場, 在 Unix/Linux上的日語軟體或作業系統一般是符合國際化标準的, 是以相容 這一标準是十分必要的. 當然, 目前的國際化标準也存在不足之處, 特别是 對中文這一特殊語言(因為含有GB和Big5兩種不能共存的編碼)的處理上, 應該由中國人在原來的基礎上作相應的擴充.

 對中文Linux來說, 遵循國際化也是必然的趨勢. 在以中文平台為基礎 的中文Linux上, 軟體移植已成為必須解決的問題, 這個問題的最終解決 方法就是遵循同一标準, 就目前來說遵循國際化标準是唯一的方法. 鑒于 目前中文Linux上的中文平台的混亂狀态, 國際化标準是從無序到有序過渡 的必然途徑.

 軟體的國際标準化也為最終使用者帶來極大的好處, 如同時支援簡體中文 和繁體中文, 中文操作為雙位元組操作, 中文輸入能夠在更大的程度上使用 标準輸入接口帶來的好處, 如輸入伺服器的定位等互動式操作.

 國際化的另一個特點是工作在應用軟體級别, 是以國際化不會給X視窗 系統帶來不穩定性.

 參考資料:

 Linux I18N: http://www.li18nux.org/

 二 Locale

 Locale 的概念

 Locale 是ANSI C語言中最基本的支援國際化的标志, 對中文Linux來說, 如果它支援國際化, 那麼支援中文Locale是最基本的要求.

 Locale 是軟體在運作時的語言環境, 它包括語言(Language), 地域 (Territory) 和字元集(Codeset). 其格式為: 語言[_地域[.字元集]]. 如對中文GBK字元集, locale的格式是:zh_CN.GBK. 目前Linux上的中文 Locale還不完善, glibc2.1.x中的許多涉及Locale的C函數還不正确. 如果 使用者需要安裝中文GBK Locale, 可以直接使用TLC6.0中的:

 glibc-2.1.2(含有GBK子產品)

 localedata-zh-0.07

 /usr/X11R6/lib/X11/locale/zh_CN.GBK/XLC_LOCALE(X 下的 GBK Locale)

 Locale 包含了以下分類:

 LC_COLLATE, 用于比較和排序. 排序對中文來說也比較重要, 但是現在的glibc中的locale對中文支援有些問題. 漢字排序的 的方式有許多種, 按照發音(漢語拼音)或者漢字筆畫來排序 是比較容易被接受的.

 LC_CTYPE, 用于字元分類

 LC_MONETORY, 用于貨币機關

 LC_NUMERIC, 用于數字顯示格式. 下面是不同國家的在貨币符号 和數字格式上的不同:

 中國大陸: 1,234.56RMB

 美國: $1,234.56

 德國: 1.234,56DM

 LC_TIME, 用于時間和日期. 時間可以用12小時或者24小時的 格式來計算. 在小時和分鐘之間可以用逗點或者冒号隔開. 下面 是一些Locale設定的時間和日期的格式:

 中國: 14點20分 2000年三月十四号

 英國: 02:20pm 14/03/2000

 美國: 02:20pm 03/14/2000

 芬蘭: 14.20 14.03.2000

 LC_MESSAGES, 用于國際化資訊, 主要是提示資訊,錯誤資訊, 狀态資訊, 标題, 标簽, 按鈕和菜單等.

 Locale 通過ANSI C 函數setlocale(分類, locale)來初始化locale 資料. 當locale設定為空時, locale的值便從系統的環境變量中取得. 為了 友善應用軟體, 設定所有的分類, 可以采用下述方式:

 setlocale(LC_ALL, "");

 如果不成功, 該函數傳回NULL. 函數應該回落到setlocale(LC_ALL,"C").

 在X中使用Locale

 在X的客戶程式中使用Locale的機制和在标準C函數中使用Locale的方式一樣, 除此之外, 在X庫中還定義了另外兩個函數來判斷X的locale支援和設定locale 的修飾(XModifier), 在X中使用Locale和libX11的基本步驟如下:

 setlocale(): 設定目前的locale

 XSupportLocale(): 用來判斷X是否支援目前設定的locale.

 XSetLocaleModifier(): 它用來指定一系列的locale修正值. 它的參量的格式是@分類=指派. 目前唯一可用的是輸入 伺服器的名稱"im". 如果參量為空, 則根據系統的環境 變量XMODIFIERS查找. 比如在系統上設定了環境變量:

 % setenv XMODIFIERS @im=Chinput (csh) 或

 % export XMODIFIERS=im=Chinput (bash)

 則客戶程式将查找到輸入伺服器Chinput, "Chinput"是 輸入伺服器所設定的名稱.

 文化習俗的差别

 下面是在國際化和本地化過程中常常遇到的并且應當注意的地方, 對國際化 軟體的開發, 應該充分注意到各個地域的文化和習慣, 開發出通用的軟體, 對于本地化過程, 則應選擇與本地域相符的習慣.

 姓名,位址等特殊資訊

 姓名中的"姓"和"名"的先後次序, 位址書寫的先後次序 電話号碼的長度等等

 圖示的通用性

 圖示是易于接受的使用者界面, 設計時應考慮到地域習慣, 而且圖示上不能有圖形文字, 否則需要重新設計本地圖示, 并翻譯圖示上的文字.

 聲音使用

 不适當的聲音或提示可能會引起人的反感. 另外, 聲音 的性别對某些國家是敏感的.

 顔色使用

 顔色和色調與民俗有關, 比如紅色在美國表示危險, 在中國 表示喜慶.

 紙張尺寸

 列印紙的尺寸因地域而不同, 在選擇預設尺寸時應注意.

 鍵盤差别

 在鍵盤上的鍵可能因國家而異, 鍵的個數也可能不一樣.

 政治因素

 在産品設計上, 盡量不要有政治敏感性部分.

 參考資料:

 Linux 上的Locale

 http://www.ping.be/linux/locales/index.shtml

 GBK Locale

 ftp://ftp.turbolinux.com.cn/pub/turbolinux/TurboLinuxC-6.0/SRPMS/SRPMS/localedata-zh-0.07-1.src.rpm

繼續閱讀