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

構築穩健的中文Linux (下)

  Linux是操作系統中的一朵奇葩,是中國軟件發展的機遇。要使這朵奇葩在中國的大地上生根、發芽,開花,要想抓住Linux機遇,首先必須解決中文本地化的問題。上期我們已經介紹了中文Linux采用中文平台及Linux國際化中的用雙字節/多字節編碼代替單字節7位或8位編碼、使用統一的大字符集ISO 10646等知識的介紹。要建築穩健的中文Linux,我們還要認識Linux的本地化及Linux核心的修改等重要問題。

  3. 本地化數據庫Locale DB

  國際化的第三個內容是搞好本地化數據庫Locale DB。

  語言、字符集、文化習俗等組成一個軟件運行時的本地環境Locale。一個Locale是從本地化特征中提取的執行環境。它包括語言、地域、字符集。Locale的格式是ZH_CN.GBK,表示中文(zh)、中國(CN)、字符集(GBK)。

  Locale可以一組Shell環境變量LANG、LC_ALL、LC_CTYPE、LC_COLLATE、LC_TIME、LC_MONETORY、LC_NUMERIC、LC_MESSAGES進行設置,也可以通過C語言國際標准中提供的setlocale()函數在應用程序中查詢和設置。用戶可以在運行時設置整個Locale的全部和部分。

  Setlocale()函數為應用程序開發者提供了一種具有設置所有或部分(稱之為類別)本地化環境的工具,setlocale()函數的語法為:

  Char *setlocale (category,locale)

  Int category;

  Char *locale;

  其中category是五個類別之一的名字,這些類別的名字是:

  LC_CTYPE(提供字符分類和大小寫區分功能);

  LC_COLLATE(提供字符串比較和排序功能);

  LC_TIME(提供日期和時間表示格式,如中國是年、月、日,美國是 月/日/年,英國是日/月/年);

  LC_MONETARY(提供貨幣表示格式,如中國為阿拉伯數字後加RMB,在財務表格中為$後寫阿拉伯數字);

  LC_NUMERIC(提供數字表示格式)。

  另外,用LC_ALL的特殊值使setlocale()函數設置所有的類別。

  Locale數據庫中除了上述本地環境服務,還包括消息服務和代碼集轉換。

  4. 輸入、輸出服務(I/O服務)

  輸入法可分為兩大類,即模式識別類和編碼類。模式識別類包括聲音輸入法、光學字符識別(optical character recognition,OCR)、手寫體識別等輸入法。編碼類主要是基於拼音、筆劃、部首等輸入法。

  圖形界面的國際化與中文本地化,具體包括:

  建立中文輸入模塊的摘掛方法和界面;

  建立各種點陣漢字庫、矢量輪廓漢字庫、曲線輪廓漢字庫的摘掛方法和界面;

  建立基於圖形界面的漢字信息處理函數。

  圖形界面的國際化處理主要在三個層次上:

  X字型服務器層(X Font Server)提供處理點陣、矢量輪廓、曲線輪廓文字;

  庫函數層(Libarries)、提供有關X字型服務器的函數,如把字體裝入服務器、調入、查詢、釋放字型;

  命令層(Commands)包括工具類和轉換類命令:

  圖形界面中文本地化提供以下應用程序:漢字造字工具、漢字圖標編輯器、漢字圖文編輯工具、漢字圖形打印工具。

  Linux關於輸入的標准還是限於鍵盤輸入。在X11R6中,有XIM(X InputMehtod)標准。XIM是在應用程序和輸入法之間的通信協議,目前還沒有字符終端的輸入法標准。

  本地化   本地化(localization,L10n,取首尾兩個字母,中間有10個字母)是向特定本地語言操作環境的轉換。

  本地化工作主要包括:代碼體系國家特征文件和輸入、輸出服務的具體實現。

  1.代碼體系指采用的字符集,我國目前是GB2312、GBK、GB18030和GB13000。

  2.國家特征文件指Locale中的本地環境內容。

  3.輸入、輸出服務與國際化中的輸入、輸出服務密切相關。

  輸入方法按其功能可分為:輸入管理層、前端處理層、輸入單元層、輸入單元算法層、輔助區處理層。

  輸入管理層是根據Locale環境自動到指定目錄下找出所需的輸入方法模塊、將其啟動或裝入應用程序,並填入有關入口表,以便建立應用程序與輸入方法之間的聯系。

  前端處理層是對各個輸入單元進行管理、負責解釋特殊鍵的含義,切換輸入單元,並把輸入單元處理的結果存於相應的緩沖區中,以保證應用程序取走、或調輔助區處理層函數顯示。

  輸入單元層是根據輸入單元的要求,對每個輸入鍵事件進行解釋、確定相應的動作、形成符合輸入單元要求的輸入串,並調用輸入單元算法層的函數進行字典查找或代碼轉換運算,把查找結果返回前端處理層。

  輸入單元算法層是根據上層函數送來的輸入碼串進行字典查找運算,並把查找結果返回上一層函數。




  輔助區處理層用來提供輸入方法的界面,即時狀態區、預編輯區和造字區類處理函數進行相應的管理。

  三、修改Linux的核心,使其完全支持UCS。   國際化就是為了解決本地化,它是由一個一個“本地化”組成的。本地化要遵循國際化,本地化完全遵循了國際化,本地化只需要解決輸入法和增加字型了。本地化的標准組織應盡量把本地化所需的內容加入到國際化中,並盡量遵循國際化。做好本地化的工作,就是為了消除本地化。什麼時候不需要再做本地化的工作了,那就說明本地化和國際化的工作做好了。

  ISO 10646是徹底解決“代碼壁壘”軟件“千年蟲”的方法。徹底實行ISO 10646就意味著放棄目前各國的字符集標准,包括中國的GB、美國的ASCII。完全實現UCS,就是在操作系統、高級程序語言、支持軟件、應用軟件、通信協議、網絡都UCS化,即都可以支持UCS。而且一些相關硬件設備如終端、打印機也要支持UCS,因為基本ASCII的硬件設備會把UCS中的一些碼值當成控制字符。這時整個系統都是完全國際化了,那時的本地化工作只是提供輸入法和擴充字型(Font)。要徹底實行ISO 10646,首先應從操作系統開始做起,對我國來說就是從Linux開始做起。

  UCS從1993年頒布至今已7年了,但進展不大。要完全國際化只能一步一步地走。第一步已制定了UCS,下一步就是在操作系統上完全支持UCS。然後各種軟件、硬件都逐個完全支持UCS。因為操作系統是所有軟件的基礎。不動Linux核心,進行的國際化/本地化本質上仍是一個“中文平台”。因為它仍是按字節處理,是架構在操作系統之上的中文處理環境。只有在操作系統上實現按字符處理、支持寬字符,徹底拋棄ASCII和各種“國家標准”, 完全支持UCS ,才能徹底解決問題。中文平台的前途是不光明的,Windows上不就有過多種中文平台嗎,後來都被微軟的核心漢化徹底擊敗。

  我們以前搞中文平台,是因為我們沒有自己的操作系統,也沒有掌握源代碼,是不得以而為之,是權宜、無奈之舉。現在Linux給了我們一個機遇。Linux開放源代碼,這給了中國軟件業一個千載難逢的好機遇。Linux也要不斷創新、不斷發展。我們不能總是跟在洋人後面爬行,“打補丁”,無所作為。我們也要對Linux進行改進,展現中國人的聰明才智,對Linux做出自己的貢獻。

  對Linux的改進主要有兩個方面。一是針對Linux的安全漏洞進行改進。八月底在北京召開的Linux World大會上,中科院軟件所副所長孫玉芳介紹說,中科院軟件所和紅旗公司針對Linux的安全漏洞已經進行改進,做了大量工作,並將於近期公布源代碼。二是按UCS的要求改造Linux,使其完全支持UCS。對Linux在核心加以改造,以徹底支持UCS,是中文Linux的最終必須要走的道路,也是Linux的正確發展道路。如果Linux的核心不加以改造,以支持UCS,Linux也將會被經濟全球化,軟件國際化的潮流沖沒。那時,徹底支持UCS的操作系統就將取代目前Linux的地位。所以徹底從核心改造Linux以支持UCS,也是有關Linux沿著正確方向健康發展的大事。

  脫離經濟全球化,軟件國際化的潮流,脫離UCS的大方向,孤立地搞民族化、本地化可能會是事倍功半,甚至事與願違的。

  完全實現UCS,不僅促使操作系統改造,對通信程序、對很多應用程序也會有影響。

  通信協議也要考慮支持UCS。國家標准《信息技術 因特網中文規范——電子郵件傳輸格式》正是利用UCS作為通用信息交換代碼。用戶要通過因特網發送信息時,用本地字符集編碼與UCS的轉換模塊將其轉換成UCS-2或其變體形式(UTF-7、UTF-8)後在因特網上傳送。接收方可以很容易地將UCS-2轉換成本地的字符集編碼。這樣省去了接收方識別和判斷對方發來的信息是用什麼編碼,也省去了用很多種轉換方法將傳送來的不同編碼的信息分別轉換成本地碼。只需用一種UCS-2與本地碼的轉換方法就行了。如果發送方和接收方都用UCS,又可省去收、發時的轉換。由此也可看出完全支持UCS的巨大好處。

  四、完全支持UCS,為中國軟件業帶來巨大好處。   采用UCS還可大大降低各種軟件本地化的工作量,一個為日本或朝鮮設計的軟件,可以很容易地改為中文版本,只須改一改輸入法和菜單而已。使用UCS也為中國軟件走向世界提供了方便之路,專為中文開發的軟件可以輕而易舉地移植為國際上各地都能使用的版本,因為處理文本的核心軟件並不需要改造。

  使用UCS也將大大降低各種軟件本地化的成本,用戶購買軟件的費用也降低了,用戶選擇軟件的范圍也更大了。

  使用UCS使各種軟件本地化的成本大大降低,使得軟件開發商可以把人力,資金更多地投入到新產品的開發,一個產品在世界各地“同步推出”也更易於實現,用戶也能更快地用上最新版本的新軟件,那時我們可以說,我國自己開發的民族軟件也是國際通用的國際軟件。

  Linux和相關應用軟件完全支持UCS後,我國可以通過制定標准,要求進入我國的類似軟件也必須支持UCS,從而推動國際各軟件公司也支持UCS。

  至於終端和打印機等硬件,我國已能制造、質量也不比國外的差。硬件設備支持UCS問題不會很大。我國率先實現終端和打印機等硬件完全支持UCS,還可通過制定標准保護國產產品,並可促進國際上的同類硬件產品也完全支持UCS。

  從核心改造Linux、使其完全支持UCS,下一步我們還要開發完全支持UCS的應用軟件。但是為了與現有的應用軟件、硬件兼容,操作系統還必須提供一種轉換機制,將其核心使用的UCS代碼映射成基於字節的本地字符集編碼。

  人們對微軟的意見主要是微軟的壟斷阻礙了技術發展,產品在中國售價太高,不開放源代碼,有“後門”。但是,微軟的Wihdows、Office畢竟在市場的占有率為第一,它確有很多地方值得學習,如易學好用,又如從核心完全實現了對UCS-2代碼體系的支持。應該說微軟在這方面是走在前面了。Windows NT/95/98/2000核心中完全實現了對UCS-2代碼體系的支持,它為不同語言的用戶提供了一個統一的、基於UCS-2代碼的操作系統核心,並且應用軟件Office97等也是基於UCS-2代碼的。Windows NT/95/98/2000提供一組碼頁(codepage)來完成UCS-2與現有應用兼容,實現與本地語言如GB/GBK、Big5、JIS等之間的轉換。Linux是否也能如此,在操作系統完全實現對ISO 10646(GB13000)UCS代碼的支持,通過類似於codepage的映射與現在應用程序兼容,而不必再使用GB。Linux在這方面應向Windows學習,並希望Linux能做得更好。



  XML是取代現在在Web上流行的Html的新一代Web語言。國外很多基於Web的程序都是以XML為基礎的。如微軟的.net就是以XML為基礎的。而XML使用的字符集就是ISO 10646,默認的字符集是UCS-2。



  XML是取代現在在Web上流行的HTML的新一代Web語言。國外很多基於Web的程序都是以XML為基礎的。如微軟的.net就是以XML為基礎的。而XML使用的字符集就是ISO 10646,默認的字符集是UCS-2。



Copyright © Linux教程網 All Rights Reserved