Locale是根據計算機使用者所使用的語言,所在國家或者地區,以及當地的文化傳統所定義的一個軟體運作時的語言環境。使用者環境可以按照所涉及到的文化傳統的各個方面分成12個大類,這12個大類分别是:
- 語言符号及其分類 (LC_CTYPE)
- 數字(LC_NUMERIC)
- 比較和排序習慣(LC_COLLATE)
- 時間顯示格式(LC_TIME)
- 貨币機關(LC_MONETARY)
- 資訊主要是提示資訊,錯誤資訊, 狀态資訊, 标題, 标簽, 按鈕和菜單等(LC_MESSAGES)
- 姓名書寫方式(LC_NAME)
- 位址書寫方式(LC_ADDRESS)
- 電話号碼書寫方式(LC_TELEPHONE)
- 度量衡表達方式 (LC_MEASUREMENT)
- 預設紙張尺寸大小(LC_PAPER)
- 對locale自身包含資訊的概述 (LC_IDENTIFICATION)
locale就是某一個地域内的人們的語言習慣和文化傳統和生活習慣。一個地區的locale就是根據這幾大類的習慣定義的,這些 locale定義檔案放在/usr/share/i18n/locales目錄下面,例如en_US, zh_CN and de_DE@euro都是 locale的定義檔案,這些檔案都是用文本格式書寫的,你可以用寫字闆打開,看看裡邊的内容,當然出了有限的注釋以外,大部分東西可能你都看不懂,因為是用的Unicode的字元索引方式。
可以看一下linux 的locale指令的結果:
[root@iZbp1ap997asubvffmqc31Z docker-image-centos-oracle-java8]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
設定locale就是設定12大類的locale分類屬性,即 12個LC_。除了這12個變量可以設定以外,為了簡便起見,還有兩個變量: LC_ALL和LANG。它們之間有一個優先級的關系: LC_ALL>LC_>LANG 可以這麼說,LC_ALL是最上級設定或者強制設定,而LANG是預設設定值。 1、如果你設定了LC_ALL=zh_CN.UTF-8,那麼不管LC_和LANG設定成什麼值,它們都會被強制服從 LC_ALL的設定,成為 zh_CN.UTF-8。 2、假如你設定了LANG=zh_CN.UTF-8,而其他的LC_=en_US.UTF-8,并且沒有設定LC_ALL的話,那麼系統的locale 設定以LC_=en_US.UTF-8。 3、假如你設定了LANG=zh_CN.UTF-8,而其他的LC_,和LC_ALL均未設定的話,系統會将LC_設定成預設值,也就是LANG的值 zh_CN.UTF-8 。 4、假如你設定了 LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_,和LC_ALL均未設定的話,那麼系統的 locale設定将是:LC_CTYPE=en_US.UTF-8,其餘的 LC_COLLATE,LC_MESSAGES等等均會采用預設值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。
系統預設的locale,"POSIX"是"C"的别名。是以當我們新安裝完一個系統時,預設的locale就是C或POSIX。
參考:
Linux中LANG,LC_ALL,local詳解