然而,在 glibc-2.2 已經不一樣了。其 locale 的資料現在分成兩個部分來放, 一個是與硬體平台有關的資料,如 LC_CTYPE、LC_TIME ...等, 是放在
/usr/lib/locale/zh_TW.big5而與硬體平台無關的資料,就只有 LC_MESSAGES 目錄及底下的訊息翻譯檔 而已,是放在
/usr/share/locale/zh_TW的目錄下。這是為了能夠符合 FHS (Filesystem Hierarchy Standard,
先說明為什麼會有與硬體平台有關的部分。所謂與硬體有關的資料,是指同一份資 料檔,在不同的硬體平台下讀取時可能會讀出不同的內容,即使這些硬體平台使用相 同的作業系統,跑相同的程式。主要的原因有兩個,一個是不同的硬體平台其 CPU 內定的整數的位元數不同,例如一般的個人電腦是 32 位元,而高階的工作站則多 半是 64 位元。另一個原因是不同類的 CPU,其整數的高位元在整個位元組的位置 可能不同,有可能是在最左邊,也有可能是在最右邊,也就是所謂位元序的問題。 因此即使同樣是 32 位元的機器,其在讀取一個位元組序列時,讀出來的結果可能 會不同。這一點我們在前幾期的文章中,在討論寬字元不能用於程式輸出,只能用 於程式內部運作時,有提到過。
在過去的 glibc-2.1.X 系統中,所有的 locale 資料都是與硬體平台無關的,因為 這些 locale 資料原始檔中,其字元定義都是以多位元組 (multi-byte) 的型態存 在,故經編譯後的資料檔都是以一個位元組 (byte,即 8 個 bits) 為單位來儲存的, 在所有的平台下都可以讀出相同的結果。 然而在 glibc-2.2,其 locale 資料中的字元定義全部都改以寬字元來儲存, 然而寬字元是不適於程式輸出的,因為它與硬體平台有關。故這部分資料就必須確保只 能在同一部機器下使用,因此它們才被移到 /usr/lib/locale 的目錄下。而 與硬體平台無關的,可以讓其他機器分享使用的資料,就只剩 LC_MESSAGES 而已,故還是放在 /usr/share/locale 底下。