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 : 提供工具程式來建立包含語言特性的語言表,
以供應用程式在執行時使用。
.其他 : 其他另有函數, 來處理日期, 貨币、時間等格式之間的
轉換。