首頁 > 軟體

Linux的locale, LC_ALL 和LANG

2020-06-16 17:26:58

什麼是locale
locale 這個單詞中文翻譯成地區或者地域,其實這個單詞包含的意義要寬泛很多。locale 是根據計算機使用者所使用的語言,所在國家或者地區,以及當地的文化傳統所定義的一個軟體執行時的語言環境。
比如說:

在“簡體中文”環境,執行date 命令,顯示的是:
2016年01月07日 星期三 10:50:20 CST

而在英文環境下,執行date 命令,顯示的是
Wed Jan  7 10:51:31 HKT 2016
locale 把按照所涉及到的使用習慣的各個方面分成12 大類,這12 個大類分別是:

語言符號及其分類(LC_CTYPE)
數位(LC_NUMBERIC)
比較習慣(LC_COLLATE)
時間顯示格式(LC_TIME)
貨幣單位(LC_MONETARY)
資訊主要是提示資訊,錯誤資訊,狀態資訊,標題,標籤,按鈕和選單等(LC_MESSAGES)
行麼書寫方式(LC_NAME)
地址書寫方式(LC_ADDRESS)
電話號碼書寫方式(LC_TELEPHONE)
度量衡表達方式(LC_MEASUREMENT)
預設紙張尺寸大小(LC_PAPER)
對locale 自身包含資訊的概述(LC_IDENTIFICATION)
而這些資訊的設定通常放在/usr/share/i18n/locales 目錄下。讓我們開啟以下zh_CN 和 en_US 。 實際上我們平時使用 date 函數的時候,就是在這裡面進行格式選擇的。

如何設定locale
通過locale 命令,可以看到LC_* 各個變數的設定,如下:

$ locale
LANG=en_HK.UTF-8
LANGUAGE=en_HK:en
LC_CTYPE="en_HK.UTF-8"
LC_NUMERIC="en_HK.UTF-8"
LC_TIME="en_HK.UTF-8"
LC_COLLATE="en_HK.UTF-8"
LC_MONETARY="en_HK.UTF-8"
LC_MESSAGES="en_HK.UTF-8"
LC_PAPER="en_HK.UTF-8"
LC_NAME="en_HK.UTF-8"
LC_ADDRESS="en_HK.UTF-8"
LC_TELEPHONE="en_HK.UTF-8"
LC_MEASUREMENT="en_HK.UTF-8"
LC_IDENTIFICATION="en_HK.UTF-8"
LC_ALL=

設定LC_TIME 變數:

$ LC_TIME=en_US.utf8  # 變數設定
$ export LC_TIME      # 生效設定
$ date                # 效果檢視LC_ALL、LANG和LC_* 的關係
設定locale 就是設定12 大類的locale分類屬性,即12個LC_*。除了這個12個變數可以設定以外,為了簡便起見,還有兩個變數:LC_ALL 和LANG。他們之間有一個優先順序的關係:LC_ALL > LC_* > LANG 可以這麼說,LC_ALL 是最上級設定或者強制設定,而LANG 是預設設定值。

在設定了LC_ALL 之後,如果不 把LC_ALL 強制設定為空,那麼LC_* 將無法被設定。但是LANG 的值不受影響。

LC_ALL=C 的含義
LC_ALL=C 是為了去除所有在地化的設定,讓命令能正確執行。

locale 可以設定型別
$ locale -a
C
C.UTF-8
en_HK.utf8
POSIX

通過該命令檢視後,可以知道所有可以使用的locale 方式。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-12/137765.htm


IT145.com E-mail:sddin#qq.com