Locale

LC_ 變數如何工作?

  • July 11, 2021

這裡有很多關於如何設置這些變數的問題,但沒有關於它們如何工作的問題。

如果我locale在終端中輸入,它會顯示一堆變數:

LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"

但是,這些在系統上不存在。做迴聲返回空白字元串echo $LC_MONETARY

我認為該實用程序正在讀取一些數據庫並列印可以自定義並設置為覆蓋預設值的環境變數?

  1. 正在讀取的數據庫是什麼?可以直接編輯它而不使用這些變數來覆蓋它的設置嗎?
  2. 如果設置了這些變數,哪些系統組件會使用它們。這些是否被任何使用者空間程序使用?
  3. locale其他實用程序隨附的軟體包的一部分嗎?
  4. 變數是否是標準的一部分並且在所有發行版中都可以找到?

任何對解釋 LC_vars 和 locale 實用程序的文件的參考將不勝感激。我發現的大多數網路文章都解釋瞭如何使用這些,但沒有解釋語言環境系統的設計/架構。

  1. 這些值不是從數據庫中讀取的。locale應用優先規則:如果LANG設置,它確定任何未設置LC_變數的預設值,如果LC_ALL設置,它覆蓋所有值。例如,我已明確設置為, 並LANG顯示所有值;但如果我設置為,它會顯示除 之外的所有值。LC_CTYPE``en_GB.UTF-8``locale``en_GB.UTF-8``LANG``fr_FR.UTF-8``fr_FR.UTF-8 LC_CTYPE
  2. 變數由函式讀取,如果setlocale程序完全關心語言環境,則應該呼叫這些變數。
  3. locale通常是 C 庫的一部分。
  4. 這些變數在POSIX中定義,該標准定義了大多數 Unix 風格系統中的通用介面。一些系統(或者更確切地說,C 庫)有擴展;例如,GNU C 庫定義了許多非標準語言環境類別,例如LC_ADDRESS.

另請參閱LANG=C 和 LC_ALL=C 有什麼區別?以及“語言環境”程序是如何工作的?

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