題:
在Mac OS X中哪裡設置了$ LANG變量?
Eimantas
2011-08-09 17:01:06 UTC
view on stackexchange narkive permalink

在安裝Lion OS X之後,我第一次使用 wget ,我注意到wget已本地化為我的母語。在終端中運行 set 命令顯示我的 LANG 變量代表我的本地語言。我在哪裡可以更改此設置或使 wget 忽略此設置?

更新

這裡是 locale >給我:

  LANG =“ lt_LT.UTF-8” LC_COLLATE =“ lt_LT.UTF-8” LC_CTYPE =“ lt_LT.UTF-8” LC_MESSAGES =“ lt_LT.UTF-8” LC_MONETARY =“ lt_LT.UTF-8” LC_NUMERIC =“ lt_LT.UTF-8” LC_TIME =“ lt_LT.UTF-8” LC_ALL =  

因此所有非參數輸出(例如(如提示和調試消息)在立陶宛語中。那是我的問題。我想將其恢復為英文。

我正在使用 zsh 作為登錄shell。

wget到底是什麼問題? “語言環境”顯示什麼,並且與“語言和文本”系統偏好設置窗格中的語言選擇所期望的相同?
六 答案:
Chris Page
2011-08-26 09:27:50 UTC
view on stackexchange narkive permalink

默認情況下,Terminal設置語言環境環境變量以匹配當前使用的語言以及Terminal使用的時間/日期/數字格式,該格式是通過

系統偏好設置>語言和文本選擇的

(這是Lion上的名稱。在較早的系統上,首選項面板的確切名稱可能會有所不同。)

一個臨時解決方案是將英語拖動到語言列表,然後打開終端,然後將立陶宛語移回頂部。然後,只有Terminal才是英文。但是,如果退出並重新啟動Terminal,它將重置為立陶宛語。

一種持久的方法是通過關閉

Terminal來告訴Terminal不要設置區域設置環境變量。 >首選項>設置> [配置文件]>高級>在啟動時設置區域設置環境變量

然後,區域設置將默認為“ C”,且未指定語言,然後大多數程序將默認為英語

。請注意,關閉此功能意味著某些程序不會知道Terminal使用的是哪種字符編碼,並且會假定它僅是ASCII或ISO-Latin-1。因此,如果Terminal使用的是UTF-8(默認設置),則這些程序可能會或可能不會達到預期的效果。

如果這主要與 wget 有關,我建議您製作一個複製默認設置配置文件,關閉自定義配置文件中的區域設置,僅在使用 wget 時使用該配置文件,以便在使用其他程序時可以繼續使用UTF-8並提供全面支持,使用默認設置。

正如其他人所述,您還可以在Shell啟動腳本中覆蓋Terminal提供的初始語言環境設置。對於zsh,將其放在〜/ .zshrc中。對於bash,請使用〜/ .bashrc(如果還沒有,請創建一個運行〜/ .bashrc的〜/ .bash_profile)。

請參閱x-man-page:// 1 / locale,以獲取有關每個區域設置環境值的更多信息。

但是,如果您只是取消設置Lang 或將其設置為“ C”,通常這將適用於所有您的shell和程序,而大多數您可能需要使用UTF-8並讓Terminal設置語言環境變量來匹配,以獲得最高程度的合作,保真度和功能性。

因此,如果您打算採用這種方法,我建議您編寫代碼來編輯(而不是替換)初始值,以便保留編碼信息(“ UTF-8”),而僅將語言設置為英語,而不是將變量設置為“ C”。

例如,這在zsh和bash中有效:

 #用Englishexport LANG = $ {LANG / lt_LT / en_US}  

LANG =“ lt_LT.UTF-8” 時,它將更改為 LANG =“ en_US.UTF-8” 。我沒有可用的 wget 進行測試,但這已經足夠了。

以這種方式進行操作意味著,如果您在Terminal中更改字符編碼首選項,則不會在您的Shell啟動腳本中覆蓋它。

做得很好;概括化“ LANG”的重新定義命令:`echo $ {LANG /*./ en_US。}`不論當前的文化名稱是什麼,都用`en_US`代替;可在bash,ksh,zsh中使用。
bmike
2011-08-09 19:05:36 UTC
view on stackexchange narkive permalink

在此處設置...

enter image description here

如果要在下拉菜單中選擇更多或更少的選項,請轉到編碼標籤查看更多賞金。

在OS X上,它是〜/ .bash_profile,而不是bashrc。人們在閱讀在線教程時對此感到非常困惑。
天哪,謝謝-趕上了。我什至去了開源頁面,並檢查了蘋果是否對gnu bash進行了更改,但仍然弄錯了。 (編輯我的答案-謝謝@the_great_monkey)
終端創建登錄外殼,該外殼運行〜/ .bash_profile。但是,大多數用戶自定義項應放在〜/ .bashrc中,以便它們也適用於非登錄外殼程序(例如,子外殼程序),而〜/ .bash_profile應運行〜/ .bashrc,以便適用於登錄外殼程序。 〜/ .bash_profile通常通常為空,並且僅包含專門用於用戶不希望為子shell運行的頂級登錄shell的代碼。
“快速閱讀手冊頁顯示外殼程序在每次登錄時都會設置此值” bash手冊頁說,但是Terminal會設置初始值,而且我還沒有見過bash設置它們(如果尚未設置)。如果關閉“設置區域設置環境…”首選項,則沒有設置任何變量,區域設置顯示為“ LANG =”,其他值均默認為“ C”。
user42973
2013-02-15 20:47:05 UTC
view on stackexchange narkive permalink

我通過在啟動終端時加載的.profile文件中設置語言來解決了這個問題。

  export LANG =“ en_US.UTF-8” export LC_ALL =“ POSIX”  
LC_ALL會覆蓋LANG,因此您的第一個命令將無效。
另外,`POSIX`等同於`C`,並且根本無法應付Unicode。
dmpogo
2012-02-13 02:20:18 UTC
view on stackexchange narkive permalink

更多基於Linux的經驗,如果您不想使用LC_LANG完全更改本地化,但只想使用英語的系統消息,則只需設置

  LC_COLLATE = C(在ls等中進行標準排序)LC_CTYPE = en_US.UTF-8  
“ LC_MESSAGES”變量控制著應以哪種語言輸出消息(如果已安裝)。
XiangXing
2014-09-26 12:28:12 UTC
view on stackexchange narkive permalink

使用法語的debian服務器和macsox bash客戶端,我只能將其添加到macosx用戶目錄上的.bash_profile中:

export LANG = fr_FR.UTF -8

已解決。

starfry
2017-10-16 15:04:44 UTC
view on stackexchange narkive permalink

其他答案是正確的,即有關啟動時設置區域設置環境變量的 Terminal 設置,並使用外殼程序的 / etc / profile 。但是,還有另一種方法值得理解-特別是如果由於遠程 ssh 登錄而遇到了“問題”。

OpenSSH(在Linux,BSD和macOS上使用)可以將環境變量從客戶端環境發送到服務器啟動的外殼。僅當客戶端配置為發送它們並且服務器配置為接受它們時,才執行此操作。客戶端(〜/ .ssh / config )需要具有:

  SendEnv LANG LC_ *
 

和服務器( / etc / ssh / sshd_config )將需要:

  AcceptEnv LANG LC_ *
 

如果它們都在適當的位置,則將客戶端的本地傳播到ssh服務器上的登錄shell:

  $ ssh me @ my-mac語言環境
LANG =“ zh_CN.UTF-8”
LC_COLLATE =“ zh_CN.UTF-8”
LC_CTYPE =“ zh_CN.UTF-8”
LC_MESSAGES =“ zh_CN.UTF-8”
LC_MONETARY =“ zh_CN.UTF-8”
LC_NUMERIC =“ zh_CN.UTF-8”
LC_TIME =“ zh_CN.UTF-8”
LC_ALL =
 

默認情況下,雪豹上沒有所需的服務器設置;它在 Sierra 上。記住在修改 / etc / sshd_config !!!

之後重新啟動SSH服務器。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...