暂时更改终端消息/警告/错误的语言
我的终端中的消息默认使用俄语显示,这是我的原生语言。
我想让它们用英语(例如粘贴在论坛中),然后切换回默认语言。
如何使用bash进行切换和切换?
有几个环境变量可用于更改语言设置。 您可以通过执行locale
命令来查看当前的区域设置。 要将所有区域设置更改为英语,请使用LANG=C
此C
语言环境始终可用,无需安装其他语言包。 (要暂时更改为非英语语言环境,请参阅@ mklement0的post。)
例子:
使用默认语言设置执行命令并打印当前区域设置:
$ /nonexistent bash: /nonexistent: Bestand of map bestaat niet $ locale LANG=nl_NL.UTF-8 LANGUAGE= LC_CTYPE="nl_NL.UTF-8" LC_NUMERIC="nl_NL.UTF-8" LC_TIME="nl_NL.UTF-8" LC_COLLATE="nl_NL.UTF-8" LC_MONETARY="nl_NL.UTF-8" LC_MESSAGES="nl_NL.UTF-8" LC_PAPER="nl_NL.UTF-8" LC_NAME="nl_NL.UTF-8" LC_ADDRESS="nl_NL.UTF-8" LC_TELEPHONE="nl_NL.UTF-8" LC_MEASUREMENT="nl_NL.UTF-8" LC_IDENTIFICATION="nl_NL.UTF-8" LC_ALL=
暂时覆盖一个程序的语言并显示它确实是临时的:
$ LANG=C ls /nonexistent ls: cannot access /nonexistent: No such file or directory $ ls /nonexistent ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet
更改当前shell中执行的所有命令的语言环境,并再次包含校样:
$ LANG=C $ ls /nonexistent ls: cannot access /nonexistent: No such file or directory $ locale LANG=C LANGUAGE= LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_PAPER="C" LC_NAME="C" LC_ADDRESS="C" LC_TELEPHONE="C" LC_MEASUREMENT="C" LC_IDENTIFICATION="C" LC_ALL=
如果您想要按照OP要求切换到美国英语 , Lekensteyn的有用答案非常有用 ,但如果您想按需切换到其他语言, 则需要做更多工作。
在开始之前,必须使用sudo apt-get install language-pack-
安装消息表,其中
是一个简单的RTF 5646语言子标签 ,例如es
表示西class牙语。
背景信息
基于GNU gettext的实用程序优先于非标准LANGUAGE
环境变量[1]而不是POSIX定义的语言环境变量LC_ALL
, LC_MESSAGES
和LANG
( LC_MESSAGES
顺序)。
鉴于在Ubuntu系统[2]上默认设置LANGUAGE
,即LANG
值的子字符串 ,它反映简单的语言标记(例如,西class牙语为es
)或语言区域标记(例如德国变体的de_DE
德语),您必须取消设置或覆盖LANGUAGE
才能使其他语言的消息生效。 [3]
选项1:设置LANGUAGE
示例 :ad-hoc切换到西class牙语消息:
$ LANGUAGE=es ls NoSuchFile ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
注意 :简单的语言标记(如es
就足够了,但您可以添加区域标识符(例如,阿根廷的es_AR
),甚至是es_AR.UTF-8
后缀(例如, es_AR.UTF-8
)。
但是,本地化消息可能仅存在于语言级别,而后备是使用与语言部分匹配的消息(在本例中为es
)。
选项2:取消设置LANGUAGE
并设置LC_ALL
此替代解决方案首先取消定义 LANGUAGE
,然后使用POSIX语言环境变量LC_ALL
隐式设置LC_MESSAGES
[4] :
$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
该解决方案具有将所有本地化方面设置为指定区域设置(例如日期/时间格式的LC_TIME
)的优点,并且通过(隐式)设置LC_MESSAGES
还向非 -GNU程序通知所需语言。
注意LC_ALL
如何要求精确的完整语言环境名称(包括charset后缀)有效( es_ES.UTF-8
)(与LANGUAGE
不同,简单语言标记就足够了(如es
))。 这同样适用于设置LC_MESSSAGES
和LANG
。 指定无效/未安装的区域设置名称会导致回退到POSIX区域设置,从而导致回退到美国英语。
脚注
[1] Lekensteyn的答案即使没有取消/覆盖LANGUAGE
也能解决的原因是一个例外 :如果(有效) LC_MESSAGES
值(通常通过LANG
或LC_ALL
间接设置)是C
或(其同义词) POSIX
,则该值得到尊重,不论LANGUAGE
的价值如何,如果有的话。 相反,如果(有效) LC_MESSAGES
值是任何其他特定区域设置,则LANGUAGE
优先。
[2]这适用于Ubuntu ,但不一定适用于其他风格 ; Lekensteyn声称Kubuntu 没有设置LANGUAGE
。
可以说,默认情况下不应设置LANGUAGE
,因为在缺少LANGUAGE
, LANG
值隐含的LC_MESSAGES
值(决定了当前的语言环境)得到了尊重。
[3]您也可以使用此方法切换到[US]英语,方法是指定LANGUAGE=C
或LANGUAGE=POSIX
(作为LANG=C
/ LANG=POSIX
的替代方法),但我不清楚是否有效识别或简单的回退机制,因为这些值不是以语言标记开头的; 或许更好的选择是en_US
。
[4]有一种边缘情况,这种方法不起作用:尝试使用路径调用可执行文件 – 无论是相对还是绝对 – 不会切换到指定的语言,而仅仅是文件名 :
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
不起作用(在当前语言环境中输出消息),而
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
(输出西class牙语错误消息)。
如果有人知道为什么以及是否有充分理由,请告诉我们。