天天看點

NLS簡介

NLS 的發展背景

Unix 是在發展于美國的作業系統, 所使用的文字也一直是英文為主的 ASCII 碼; 國際化 (internationalization) 及本土化 (localization) 的需求從未考慮過。在問世二十多年後的今天, Unix 遍布全世界, 提 供一個介面讓使用者能用他們自己的語言(1), 而不隻是英文, 來和應 用程式溝通, 已是十分重要的課題了。于是, 就有了 NLS 的誕生, 以 實作 Unix 及應用軟體的國際化及本土化的目标。

什麼是 NLS ?

NLS (Native Language Support) 是一個附加于 Unix 上的子系統 (subsystem), 其目的就是使傳統的 Unix 系統及其上之應用程式, 能 夠不拘限于某一種語言, 和使用者所使用的語言獨立( language independent)。 NLS 能使程式設計師撰寫出來的程式, 很有彈性地在不同使用不同的語 言環境下都可使用。程式隻須撰寫、編譯一次, 同一個可執行檔會依使 用者的語言不同, 在執行時 (run-time) 自動改變所使用的字碼集、顯 示訊息、文字處理能力等等, 讓使用者可以自己熟悉的語言和應用程式 溝通。在過去以及現在, 某一軟體都是為某一種國文或字碼集 (如英文 ASCII 碼, 中文 BIG5 碼等等) 所寫; 如要在别種語言環境下使用時, 常常就必須重寫。而未來使用 NLS 後, 應可避免此一情況。

為什麼需要中文 NLS ?

因為中文文字的特性, 進行中文資料的軟體會因為所使用中文内碼的不 同而必須使用不同的軟體, 如同不同國家的使用不同的國文一般。 由于中文文字的特性, 一個字須用 2 到 4 的 byte 來表示其内碼值。 許多既有的英文版軟體為了能進行中文, 不但須修改成具多位元組文字 的處理能力, 而往往更改後的版本, 若不是功能上相較之下有瑕疵, 即 是中文版本較英文版為舊。 再者就是: 中文内碼的種類繁多, 如同不同國家民族使用不同語言般歧 異。當軟體針對某一内碼開發後, 如要在他種内碼下使用時, 重寫所需 之工夫, 往往并不亞于自英文版改至中文版。為了不同内碼必須開發不 同之版本, 也使得中文的資料及程式的重覆使用特性 (reusability) 大為降低。甚至會有某些中文内碼環境無類似軟體可用之情形産生。 如果利用 NLS 技術, 使得單一版本的軟體即可适用于多種中文内碼的 環境; 不需要因語言、字元寬度、編碼方式等等不同而修改或重新編 譯程式。如此可使中文軟體不須因中文内碼環境之不同開發不同版本, 以節省成本及提高程式和資料的重覆使用性。同時也可使許多英文軟 體改成中文版的移植較為容易。

NLS 涵蓋那些部份 ?

NLS 主要包含了一 C 語言的程式庫、工具程式, 以及一種新程式寫 作觀念 (programming style)。 在概念上, NLS 包含了下面三部份 : .一個和語言獨立 (language dependent) 的程式 : 和使用者所使 用的語言言依賴(language dependent) 的部份并不是 hard code 在應用程式内, 而是由 NLS 函數内部來處理。 .Message catalogs : 應用程式所顯示的訊息均不 hard code 在程 式中, 而是以外部檔案的方式儲存。當在不同的語言環境下使用時, 會自動地選擇相對應的訊息檔。 .Language Tables : 所有和語言(或内碼)相關的資訊, 均以表格的 方式儲存。應用程式在執行時依據使用者設定的語言環境變數, 讀 取相對應的語言表。 而 NLS 的函數及工具程式, 可依照上述概念, 分為 : . 寬字元 (wide character) 及相關處理函數: NLS 定義了一種新的資料型态: 寬字元。傳統的 C 語言中, 通常都 是使用 char 資料型态來儲存字元 (character)。 char 通常是定 義成一個 byte 的大小, 是以一個如英文字母的字元隻須一個 char 的空間就足以表達 ; 但是中文字至少須要 2 至 4 個 char 才能表 示其内碼值, 是以儲存一個中文字須要數個 byte 的空間才夠。也 使得一個中文字不是以一個整體的文字, 而是零散的數個 byte (char) 的組合。 寬字元則是打破此一限制及觀念 : 它是一種新的用來表示單一或多 位元組字元的内部資料型态。它的大小大于一個 byte, 通常是定義 成四個 byte 寬, 以保證一個寬字元就足以表達一個語言所有的文 字。中文字不須要再以兩個或四個 byte ( char ) 來表示一個中文 字。不論是一個中文字或一個英文字母, 都是以一個寬字元表示。 如此在内部處理上, 可以大大減低了因為中英文字(母)所占的 byte 數不同而造成的困擾。 除了寬字元的資料型态外, 另有相當多的寬字元與多位元組字元轉 換的函數, 寬字元的輸出入函數, 字串函數, 及字元處理、内碼轉 換等函數。  .Message Catalog : 提供函數使應用程式可以在執行時讀入相對 應的訊息檔。 .Language Table : 提供工具程式來建立包含語言特性的語言表, 以供應用程式在執行時使用。 .其他 : 其他另有函數, 來處理日期, 貨币、時間等格式之間的 轉換。

繼續閱讀