在Mac OS X中哪里设置了$ LANG变量?


24

wget在安装Lion OS X之后,我第一次使用它,并且我注意到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用作我的登录外壳。


到底是什么问题wget?会locale显示什么,并且与您在“ 语言和文本”系统首选项窗格中选择语言所期望的结果相同?
bmike

Answers:


26

默认情况下,Terminal将区域设置环境变量设置为与Terminal所使用的当前所选语言和时间/日期/数字格式相匹配,该格式是通过以下方式选择的

系统偏好设置>语言和文本

(这是Lion上的名称。在较早的系统上,首选项面板的确切名称可能有所不同。)

临时解决方案是将英语拖到语言列表的顶部,然后打开“终端”,然后将立陶宛语移回顶部。然后,只有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。

但是,如果您只是unset LANG将其设置为“ C”或将其设置为“ C”,那么通常这将适用于所有外壳程序和程序,而在大多数情况下,您可能希望使用UTF-8并让Terminal设置要匹配的语言环境变量,以获得最高程度的合作,保真度和功能性。

因此,如果您要走这条路,建议您编写代码来编辑(而不是替换)初始值,以便保留编码信息(“ UTF-8”),而仅将语言强制为英语,而不是将变量设置为“ C”。

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

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

何时LANG="lt_LT.UTF-8",它将更改为LANG="en_US.UTF-8"。我没有wget测试的方法,但这足够了。

这样做意味着如果您在Terminal中更改字符编码首选项,则不会在Shell启动脚本中覆盖它。


做得很好; 概括化LANGredefinition命令: 不管echo ${LANG/*./en_US.}当前的区域性名称en_US是什么,都将其替换为;在bashksh中工作zsh
mklement0 '18 / 10/21

7

在这里设置...

在此处输入图片说明

如果您希望下拉菜单中提供更多或更少的选项,请转到“ 编码”标签以查看更多赏金。


3
在OS X上,它是〜/ .bash_profile,而不是bashrc。人们在阅读在线教程时对此感到非常困惑。
Enrico Susatyo 2011年

天哪,谢谢-赶上了。我什至去了开源页面,并检查了苹果是否对gnu bash进行了更改,但仍然弄错了。(编辑我的答案-谢谢@the_great_monkey)
bmike

4
终端创建登录外壳,该外壳运行〜/ .bash_profile。但是,大多数用户自定义项应放在〜/ .bashrc中,以便它们也适用于非登录外壳程序(例如,子外壳程序),而〜/ .bash_profile应运行〜/ .bashrc,以便其适用于登录外壳程序。〜/ .bash_profile通常通常为空,并且仅包含专门用于用户不希望为子shell运行的顶级登录shell的代码。
克里斯·佩奇

1
“快速阅读手册页显示shell在每次登录时都设置了该值” bash手册页说,但是Terminal设置了初始值,而且我还没有见过bash设置它们(如果尚未设置)。如果关闭“设置区域设置环境…”首选项,则不会设置任何变量,并且会显示区域设置,LANG=其他值均默认为"C"
克里斯·佩奇

2

我通过在.profile文件中设置语言来解决此问题,该文件在我启动终端时就会加载。

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"

LC_ALL覆盖LANG,因此您的第一个命令将无效。
mklement0

同样,POSIX它等同于C并且根本无法应付Unicode。
塞巴斯蒂安·格拉夫

1

更多基于Linux的经验,如果您不想使用LC_LANG完全更改本地化,但只想使用英语系统消息,则只需设置

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

LC_MESSAGES变量控制应以哪种语言输出消息(如果已安装)。
mklement0 '18 -10-21

0

使用法语的debian服务器和macsox bash客户端,我“只是”不得不将其添加到macosx用户目录上的.bash_profile中:

出口LANG = fr_FR.UTF-8

解决了。


0

其他答案是正确的,即关于在启动时使用shell的设置区域设置环境变量Terminal设置。但是,还有另一种方法值得理解-特别是如果由于远程登录而遇到“问题” 。/etc/profilessh

OpenSSH(在Linux,BSD和macOS上使用)可以将环境变量从客户端环境发送到服务器启动的外壳。仅当客户端配置为发送它们并且服务器配置为接受它们时,才执行此操作。客户(~/.ssh/config)需要具备以下条件:

SendEnv LANG LC_*

并且服务器(/etc/ssh/sshd_config)需要:

AcceptEnv LANG LC_*

如果两者都到位,则将客户端的本地传播到ssh服务器上的登录shell中:

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

默认情况下,Snow Leopard上没有所需的服务器设置;它在塞拉利昂。记住在修改后重新启动SSH服务器/etc/sshd_config

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.