如何将命令输出语言从本机语言切换为英语,这样我可以发布带有英语命令输出(错误消息)的Ask Ubuntu问题?
如何将命令输出语言从本机语言切换为英语,这样我可以发布带有英语命令输出(错误消息)的Ask Ubuntu问题?
Answers:
这是我在DE和EN语言环境之间切换的bash函数。
您可以使用您的首选语言扩展此代码。要使用此功能,请将其放入您的~/.bashrc
(或~/.bash_profile
)-
呼叫_configure_locale EN
以切换为英语。
function _configure_locale() { # [profile]
local profile=${1:-EN}
case ${profile} in
DE|DE_DE|de_DE)
LC_ALL="de_DE.UTF-8"
LANG="de_DE.UTF-8"
LANGUAGE="de_DE:de:en_US:en"
;;
EN|EN_US|en|en_US)
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
;;
*)
echo "ALERT" "${FUNCNAME}: unknown profile '${profile}'"
;;
esac
LC_PAPER="de_DE.UTF-8"; # independent from locale
LESSCHARSET="utf-8"; # independent from locale
MM_CHARSET="utf-8" # independent from locale
echo "locale settings" "${LANG}";
export LC_ALL LANG LANGUAGE LC_PAPER LESSCHARSET MM_CHARSET
}
总的来说,我建议改变所有3个环境变量LC_ALL
,LANG
,LANGUAGE
以避免某些程序的misbehaviours。
将代码扩展为您的母语非常简单。您可以通过调用以下命令找到所需的值
env |egrep -e 'LC_ALL|LANG'
case
和指定输入以使其符合<lang>_<country>
格式来轻松地对此进行调整。然后,您可以假设UTF-8通过它。如果您真的很想一个整洁的解决方案,则应该检查用户输入是否正确,locale -a
以确保实际安装了所请求的语言环境。
打开终端Ctrl+ Alt+ T和类型:
LANG=en_US.UTF-8 bash
或:
LC_ALL=C bash
现在终端输出为英语。您可以使用进行检查locale
。
可以发出命令来永久alias
使用该命令。.bashrc
使用您喜欢的编辑器打开文件,并在其中放置以下代码:
alias basheng='LANG=en_US.UTF-8 bash'
或:
alias basheng='LC_ALL=C bash'
重新启动Bash shell。现在您有了命令basheng
。在Bash中键入它以获得英语Bash shell。离开英语壳类型exit
。
资源:
LANG
是不足够的机会,所有的输出。
LANG=en_US.UTF-8 && LC_ALL=en_US.UTF-8 && LANGUAGE=en_US.UTF-8 bash
吗?
LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANGUAGE=en_US.UTF-8 $SHELL
。
这是通过可通过环境变量设置的语言环境设置来配置的。有四层变量;设置的第一个优先:
LANGUAGE
—不要使用它,它很少有用,并且可能导致错误。不幸的是,某些版本的Ubuntu对其进行了设置,因此您可能需要取消设置。LC_ALL
—覆盖类别特定的设置,主要是要由要在默认语言环境中运行的程序使用。不打算用作全局设置。LC_
:LC_CTYPE
,LC_MESSAGES
,LC_TIME
,...。LANG
—为所有类别设置默认语言环境,该语言环境将在全局用户设置中使用。称为“普通”语言环境,其中所有消息均未翻译,默认时间和数字格式,ASCII作为字符集等C
。每个系统上都存在此语言环境。
因此,要运行带有英语消息的程序,请运行
unset LANGUAGE; LC_MESSAGES=C myprogram --option
要么
unset LANGUAGE
export LC_MESSAGES=C
myprogram --option
myotherprogram
要在关闭所有本地化的情况下运行程序,请运行
env -u LANGUAGE LC_ALL=C myprogram --option
但请注意,这会将字符编码切换为ASCII(因此不能使用Unicode,latin-1等)。
请参阅我应将我的语言环境设置为什么,以及这样做的含义是什么?有关语言环境的更详细概述。
LANGUAGE
是它的优先级高于LC_ALL
,这会导致错误,因为程序设置LC_ALL
为获取可预测的输出,然后由于未获得预期的输出而感到困惑。
LANGUAGE
尽管如此,设置还是一个坏主意,因为这样做的好处非常渺茫,而漏洞却很烦人且难以发现。不过您说的没错,我应该提到unsetting LANGUAGE
。
最简单的方法是通过按Alt + F2并运行以下命令来打开终端:
env LANGUAGE=en gnome-terminal
在你的 ~/.bashrc
unset LC_ALL
export LC_MESSAGES=C
然后
source ~/.bashrc
核实
$ locale
LANG=pl_PL.utf8
LANGUAGE=
LC_CTYPE="pl_PL.utf8"
LC_NUMERIC="pl_PL.utf8"
LC_TIME="pl_PL.utf8"
LC_COLLATE="pl_PL.utf8"
LC_MONETARY="pl_PL.utf8"
LC_MESSAGES=C
LC_PAPER="pl_PL.utf8"
LC_NAME="pl_PL.utf8"
LC_ADDRESS="pl_PL.utf8"
LC_TELEPHONE="pl_PL.utf8"
LC_MEASUREMENT="pl_PL.utf8"
LC_IDENTIFICATION="pl_PL.utf8"
LC_ALL=
为什么要先取消设置?
LC_ALL覆盖单个LC_ *设置:如果设置了LC_ALL,则以下任何内容均无效。
LANG
像这样进行更改,这可能会有所帮助,但是我们不需要复制的错误消息使用英语。我们要求作者写的是英文(尽管我们通常翻译它而不是关闭问题)。因此,用英语写的带有西班牙语末尾文字的问题就可以了,而用西班牙语写的带有英语末尾文字的问题就不行了。