壹份Locale是壹組信息的集合,大多數程序利用它來確定特定的國家和語言設置。這些locale以及它們包含的數據是系統庫的壹部分,可以在大多數系統中的/usr/share/locale目錄下找到。locale的名稱通常命名為ab_CD的形式,其中ab是兩個(或三個)字母的語言代號(在ISO-639中指定),CD是兩個字母的國家代號(在ISO-3166中指定)。壹些變量常常附加在locale名稱的後面,例如en_GB.UTF-8或de_DE@euro。
Locale的設置保存在環境變量中。典型情況下設置在 /etc/env.d/02locale (系統全局設置)和 ~/.bashrc (特定用戶設置)文件中。這些變量分別決定locale各方面的設置,下面的表格給出了具體說明。所有變量都會取壹個前述ab_CD格式的locale名稱作為值。
locale把按照所涉及到的文化傳統的各個方面分成12個大類,這12個大類分別是:
其中,與中文輸入關系最密切的就是 LC_CTYPE,LC_CTYPE 規定了系統內有效的字符以及這些字符的分類,諸如什麽是大寫字母,小寫字母,大小寫轉換,標點符號、可打印字符和其他的字符屬性等方面。而locale定義zh_CN中最最重要的壹項就是定義了漢字(Class “hanzi”)這壹個大類,當然也是用Unicode描述的,這就讓中文字符在Linux系統中成為合法的有效字符,而且不論它們是用什麽字符集編碼的。
在en_US的locale定義中,並沒有定義漢字,所以漢字不是有效字符。所以如果要輸入中文必須使用支持中文的locale,也就是zh_XX,如zh_CN,zh_TW,zh_HK等等。
另外非常重要的壹點就是這些分類是彼此獨立的,也就是說LC_CTYPE,LC_COLLATE和 LC_MESSAGES等等分類彼此之間是獨立的,可以根據用戶的需要設定成不同的值。這壹點對很多用戶是有利的,甚至是必須的。例如,我就需要壹個能夠輸入中文的英文環境,所以我可以把LC_CTYPE設定成。
設定locale就是設定12大類的locale分類屬性,即 12個 LC_* 。除了這12個變量可以設定以外,為了簡便起見,還有兩個變量: LC_ALL 和 LANG 。它們之間有壹個優先級的關系:
可以這麽說,LC_ALL是最上級設定或者強制設定,而LANG是默認設定值。
所以,locale是這樣設定的: