我應該將我的語言環境設置為什麼以及這樣做的含義是什麼?
這個問題是通過詢問 Chromium browser does not allow setting the default paper size for “Print to File”以及與 @Gilles 在聊天中的對話來激發的。正如@don_crissti 所指出的,並且經過我的驗證,更改語言環境(至少
LC_PAPER
)會影響選擇的紙張尺寸。我從來沒有考慮過要選擇什麼,並且總是選擇它,
en_US.UTF-8
因為它似乎是一個合理的預設選擇。但是,根據@Gilles 聊天(請參閱從http://chat.stackexchange.com/transcript/message/17017095#17017095開始的對話)。提取物:
Gilles:LC_PAPER 預設為 $LANG
Gilles:你必須有 LANG=en_US.UTF-8。這是一個壞主意:它設置了 LC_COLLATE ,這幾乎總是一件壞事
Gilles:LC_COLLATE 沒有描述正確的排序規則,它過於嚴格(逐個字元)刪除 LANG 並改為設置 LC_CTYPE 和 LC_PAPER
Gilles:加上 LC_MESSAGES 如果你想要英語以外的其他語言的消息
顯然,這裡有一些我不知道的問題,我相信還有很多其他問題。那麼,設置語言環境時應該考慮哪些問題,應該如何設置呢?我一直只是
dpkg-reconfigure locales
在 Debian 中執行,並沒有三思而後行。具體問題:我應該將我的語言環境設置為 en_IN.UTF-8 嗎?這樣做有什麼缺點嗎?
區域設置是與您的文化相關的使用者偏好。
語言環境名稱
在我所知道的所有目前 unix 變體上(但不是在一些古董上),語言環境名稱遵循相同的模式:
- ISO 639-1小寫兩字母語言程式碼,或ISO 639-2三字母語言程式碼(如果該語言沒有兩字母程式碼)。例如,
en
對於英語,de
對於德語,ja
對於日語,uk
對於烏克蘭語,ber
對於柏柏爾語,……- 對於許多(但不是所有)語言,下劃線
_
後跟ISO 3166大寫的兩個字母的國家/地區程式碼。例如:en_US
對於美國英語、en_UK
對於英國英語、fr_CA
加拿大(魁北克)法語、de_DE
對於德國德語、de_AT
對於奧地利德語、ja_JP
對於日語(日本)等。- 可選地,一個點
.
後跟字元編碼的名稱,例如UTF-8
,ISO-8859-1
,KOI8-U
,GB2312
,Big5
等。至少使用 GNU libc(我不知道這有多普遍),在編碼名稱中忽略大小寫和標點符號。例如,zh_CN.UTF-8
普通話(簡體)是UTF-8編碼的,zh_CN
普通話是GB2312編碼的,zh_TW
台灣(繁體)中文是Big5編碼的。- 可選地,at 符號
@
後跟變體的名稱。變體的含義取決於語言環境。例如,許多歐洲國家/地區都有一種@euro
語言環境變體,其中貨幣符號為 € 並且編碼是包含此字元的一種(ISO 8859-15 或 ISO 8859-16),而不是帶有舊貨幣符號的樸素變體。例如,en_IE
(English, Ireland) 使用 latin1 (ISO 8859-1) 編碼和 £ 作為貨幣符號,而en_IE@euro
使用 latin9 (ISO 8859-15) 編碼和 € 作為貨幣符號。此外,所有類 unix 系統上都存在兩個語言環境名稱:
C
和POSIX
. 這些名稱是同義詞,意思是電腦語言,即適用於由電腦程序解析的數據的預設設置。區域設置
POSIX定義了以下語言環境類別:
LC_CTYPE
:終端應用使用的字元集:分類數據(哪些字元是字母、標點、空格、無效等)和大小寫轉換。文本實用程序通常會注意LC_CTYPE
確定字元邊界。
LC_COLLATE
:整理(即排序)順序。由於以下幾個原因,此設置的用途非常有限:
- 大多數語言都有復雜的規則,取決於排序的內容(例如字典單詞和專有名稱可能不使用相同的順序)並且不能用
LC_COLLATE
.- 很少有應用程序使用區域設置的軟體執行正確的排序順序。例如,文字處理器將文件的語言和編碼儲存在文件本身中(否則文件將無法在具有不同區域設置的系統上正確處理)並且不關心環境指定的區域設置。
LC_COLLATE
可能會產生令人討厭的副作用,特別是因為它導致排序順序 A < a < B < …,這使得“A 和 Z 之間”包括小寫字母 a 到 y。特別是非常常見的正則表達式,例如[A-Z]
break some applications。
LC_MESSAGES
:資訊和錯誤消息的語言。
LC_NUMERIC
: 數字格式:小數和千位分隔符。許多應用程序硬編碼
.
為小數分隔符。這使得它LC_NUMERIC
不是很有用並且有潛在的危險:
- 即使您設置了它,您仍然會經常看到預設格式。
- 您可能會遇到這樣一種情況,即一個應用程序生成依賴於語言環境的輸出,而另一個應用程序期望
.
是小數點或,
欄位分隔符。
LC_MONETARY
: 類似LC_NUMERIC
,但是是當地貨幣的數量。很少有應用程序使用它。
LC_TIME
: 日期和時間格式:星期和月份名稱、12 或 24 小時制、日期部分的順序、標點符號等。您可以在非嵌入式 Linux 上找到的 GNU libc 定義了額外的語言環境類別:
LC_PAPER
:預設紙張尺寸(由高度和寬度定義)。LC_NAME
,LC_ADDRESS
,LC_TELEPHONE
,LC_MEASUREMENT
,LC_IDENTIFICATION
: 我不知道有任何應用程序使用這些。環境變數
使用區域設置的應用程序根據環境變數確定它們。
- 然後使用
LANG
環境變數的值,除非被另一個設置覆蓋。如果LANG
未設置,則預設語言環境為C
.- 這些
LC_xxx
名稱可以用作環境變數。- 如果
LC_ALL
設置了,則忽略所有其他值;這主要用於設置LC_ALL=C
需要產生相同輸出的執行應用程序,而不管它們在哪裡執行。- 此外,GNU libc用於
LANGUAGE
定義備份LC_MESSAGES
(例如LANGUAGE=fr_BE:fr_FR:en
,更喜歡比利時法語,或者如果不可用法國法語,或者如果不可用英語)。安裝語言環境
語言環境數據可能很大,因此某些發行版不會以可用的形式發布它們,而是需要額外的安裝步驟。
- 在 Debian 上,要安裝語言環境,請執行
dpkg-reconfigure locales
並從對話框中的列表中選擇,或者編輯/etc/locale.gen
然後執行locale-gen
.- 在 Ubuntu 上,要安裝語言環境,請使用語言環境
locale-gen
的名稱作為參數執行。您可以定義自己的語言環境。
推薦
有用的設置是:
- 設置
LC_CTYPE
為您對文本文件進行編碼的語言和編碼。確保您的終端使用該編碼。對於大多數語言,只有編碼很重要。有幾個例外;例如,大寫字母
i
在I
大多數語言中,但İ
在土耳其語中 (tr_TR
)。
- 設置
LC_MESSAGES
為您希望查看消息的語言。- 如果您希望 US Letter 作為預設紙張尺寸,則設置
LC_PAPER
為;如果您希望 A4,則設置為en_US
其他任何尺寸(例如en_GB
)。- (可選)設置
LC_TIME
為您喜歡的時間格式。如上所述,避免設置
LC_COLLATE
和LC_NUMERIC
。如果您使用LANG
,則通過將它們設置為 來明確覆蓋這兩個類別C
。