Linux 上的 LC_* 區域設定字串到底代表什麼?

Linux 上的 LC_* 區域設定字串到底代表什麼?

當我在 Linux 命令提示字元下鍵入時

locale

我得到一長串LC_*變數(例如LC_TIME等等)。變數的值類似於此列表中的值:

en_US.8859-1
de_DE@euro
fr_FR.utf-8

各個部分到底意味著什麼?

我知道這@euro與最後一部分相同.8859-15,通常最後一部分意味著實際的字元集(位元組到實際符號的映射)。但是前兩個代碼到底「做什麼」呢?它們會影響系統的哪些屬性?例如(只是為了有一些範例可以使用),、en_US.8859-15和之間有什麼區別?所有文字檔案都具有完全相同的字元集,因此我在選擇的編輯器中開啟的所有文字檔案看起來都是一樣的。那麼,如果我從一個“預字符集代碼”切換到另一個“預字符集代碼”(例如 from to )會發生什麼?de_DE.8859-15de_CH.8859-15en_CU.8859-15de_CHen_US

是否有任何表格可以以漂亮且易於閱讀的方式列出差異?

答案1

這兩個部分組成一個ISO-639 語言代碼。第一部分是語言本身,第二部分(通常)是國家代碼指定哪個本地變體。

LANG您可以觀察幾乎所有具有翻譯功能的程式 的變更效果。LC_COLLATE影響程序的結果sort;影響和LC_DATE的輸出。對於某些區域設置,您可能(甚至很可能)沒有安裝任何使用它們的東西。datels -l

在大多數系統上,僅LC_LANG設置了該設置,所有其他設置都會回退到繼承該設置。

locale以下引用來自 (7) 的手冊頁:

LC_COLLATE
這用於更改函數 strcoll(3) 和 strxfrm(3) 的行為,這兩個函數用於比較本地字母表中的字串。例如,德語升號 s 被排序為“ss”。
LC_CTYPE
這會更改字元處理和分類函數(例如 isupper(3) 和 toupper(3))以及多位元組字元函數(例如 mblen(3) 或 wctomb(3))的行為。
LC_MONETARY
更改 localeconv(3) 返回的信息,該信息描述了通常打印數字的方式,包括小數點與小數逗號等詳細信息。此資訊由函數 strfmon(3) 在內部使用。
LC_MESSAGES
更改訊息顯示的語言以及肯定或否定答案的外觀。 GNU C 函式庫包含 gettext(3)、ngettext(3) 和 rpmatch(3) 函數,以方便使用這些資訊。如果類別設定為「C」以外的有效語言環境,則 GNU gettext 系列函數也遵循環境變數 LANGUAGE(包含以冒號分隔的語言環境清單)。
LC_NUMERIC
當建議 printf(3) 和 scanf(3) 系列函數使用區域設定時,請變更它們使用的資訊。也可以使用 localeconv(3) 函數讀取此資訊。
LC_TIME
更改 strftime(3) 函數的行為,以本地可接受的形式顯示當前時間;例如,歐洲大部分地區使用 24 小時制,而美國則使用 12 小時制。
LC_ALL上述所有的。

相關內容