如何将命令输出语言从我的母语切换为英语,以便我可以发布带有英语命令输出(错误信息)的Ask Ubuntu问题?
这是我用于在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
}
LC_ALL
、LANG
、LANGUAGE
,以避免某些程序的异常行为。
将代码扩展到您的本地语言非常简单。您可以通过调用以下命令找到所需的值。
env |egrep -e 'LC_ALL|LANG'
case
并指定输入符合<lang>_<country>
的格式来轻松适应这个。然后,你可以直接传递它,假设是UTF-8编码。如果你真的对一个整洁的解决方案很感兴趣,你应该检查用户输入是否与locale -a
匹配,以确保所请求的区域设置实际上已安装。 - bitmaskLANG
不足以改变所有输出。 - bitmaskLANG=en_US.UTF-8 && LC_ALL=en_US.UTF-8 && LANGUAGE=en_US.UTF-8 bash
更好吗? - BuZZ-dEELANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANGUAGE=en_US.UTF-8 $SHELL
。 - bitmaskLANGUAGE
— 不要使用它,它很少有用并且可能导致错误。不幸的是,一些Ubuntu版本会设置它,所以你可能需要取消设置。LC_ALL
— 覆盖特定类别的设置,主要用于希望在默认区域设置下运行的程序。不应作为全局设置使用。LC_
开头的特定类别变量: LC_CTYPE
、LC_MESSAGES
、LC_TIME
等。LANG
— 设置所有类别的默认区域设置,用于全局用户设置。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
LANGUAGE
的主要问题是它优先于LC_ALL
,这会导致程序出现错误。因为程序将LC_ALL
设置为获取可预测的输出,但由于没有得到预期的输出而感到困惑。 - Gilles 'SO- stop being evil'LANGUAGE
是个不好的主意,因为好处很少,而且错误可能会让人烦恼且难以找到。不过你是对的,我应该提到取消设置LANGUAGE
。 - Gilles 'SO- stop being evil'LANGUAGE
。 - Gilles 'SO- stop being evil'~/.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=
env LANGUAGE=en gnome-terminal
# LANGUAGE=en_GB:bg
必须更改为:
# LANGUAGE=en_GB:en
# export LANGUAGE=en_GB:en
完成。
echo 'export LANG=C' >> ~/.bashrc && exec "$BASH"
LANG
,这可能会有所帮助,但我们并不要求复制的错误信息必须是英文的。我们要求作者写的内容必须是英文的(尽管我们通常会将其翻译而不是关闭问题)。因此,用西班牙语编写的问题并附带英文终端文本是可以接受的,而用英文编写的问题并附带西班牙语终端文本则不行。 - Eliah Kagan