Locale

我應該將我的語言環境設置為什麼以及這樣做的含義是什麼?

  • August 8, 2014

這個問題是通過詢問 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 嗎?這樣做有什麼缺點嗎?

另請參閱:LC_COLLATE 是否(應該)影響字元範圍?

區域設置是與您的文化相關的使用者偏好。

語言環境名稱

在我所知道的所有目前 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 系統上都存在兩個語言環境名稱:CPOSIX. 這些名稱是同義詞,意思是電腦語言,即適用於由電腦程序解析的數據的預設設置。

區域設置

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為您對文本文件進行編碼的語言和編碼。確保您的終端使用該編碼。

對於大多數語言,只有編碼很重要。有幾個例外;例如,大寫字母iI大多數語言中,但İ在土耳其語中 ( tr_TR)。

  • 設置LC_MESSAGES為您希望查看消息的語言。
  • 如果您希望 US Letter 作為預設紙張尺寸,則設置LC_PAPER為;如果您希望 A4,則設置為en_US其他任何尺寸(例如en_GB)。
  • (可選)設置LC_TIME為您喜歡的時間格式。

如上所述,避免設置LC_COLLATELC_NUMERIC。如果您使用LANG,則通過將它們設置為 來明確覆蓋這兩個類別C

引用自:https://unix.stackexchange.com/questions/149111