将命令输出语言从本地语言切换为英语。

如何将命令输出语言从我的母语切换为英语,以便我可以发布带有英语命令输出(错误信息)的Ask Ubuntu问题?

5这有点误导人。实际上,人们并不需要这样做。(如果你认为我们应该要求原帖作者这样做,请在指示任何人这样做之前在元社区发帖。)他们可以像这样更改LANG,这可能会有所帮助,但我们并不要求复制的错误信息必须是英文的。我们要求作者写的内容必须是英文的(尽管我们通常会将其翻译而不是关闭问题)。因此,用西班牙语编写的问题并附带英文终端文本是可以接受的,而用英文编写的问题并附带西班牙语终端文本则不行。 - Eliah Kagan
5@EliahKagan 是的,你说得对,但无论如何我认为它是有用的。 - BuZZ-dEE
2我同意,人们能够做到这一点是很有用的,你提出这个问题也很好!然而,重要的是让人们知道我们并不“要求”他们这样做(但是我们确实要求问题和答案本身用英文书写)。 - Eliah Kagan
9@EliahKagan相反,发布实际错误信息非常重要,并且最好用英文发布,因为这是该网站主要受众可以识别和测试的语言。(永远不要发布重新翻译过的错误信息。始终使用复制粘贴,因为确切的措辞、标点甚至间距都可能具有重要意义。) - Gilles 'SO- stop being evil'
9个回答

export LC_ALL=C就足够了。所有后续命令的输出都将是英文。

更多信息:"LC_ALL=C"是什么意思?

如果你想恢复到本地语言,请取消设置LC_ALL变量:

unset LC_ALL

1如果你想要在英语以外的其他语言中输出结果,那就会有问题了。在这个设置之后,我无法使用任何带重音的字符。https://askubuntu.com/a/818241/227400 更好一些。 - Maïeul
1关闭Konsole并打开新的终端后,它就停止工作了。新的终端是用旧的(非英语)语言显示的。 - parsecer
请参考下面rofrol的答案,以获取永久解决方案。 - parsecer

终端的bash函数

这是我用于在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_ALLLANGLANGUAGE,以避免某些程序的异常行为。

适应您的语言

将代码扩展到您的本地语言非常简单。您可以通过调用以下命令找到所需的值。

env |egrep -e 'LC_ALL|LANG'

脚本需要更改为除了德语(DE)以外的其他语言吗?我正在寻找一种与母语无关的解决方案。 - BuZZ-dEE
@BuZZ-dEE:你可以(而且可能应该)通过去掉case并指定输入符合<lang>_<country>的格式来轻松适应这个。然后,你可以直接传递它,假设是UTF-8编码。如果你真的对一个整洁的解决方案很感兴趣,你应该检查用户输入是否与locale -a匹配,以确保所请求的区域设置实际上已安装。 - bitmask
@buzz-dee:请查看更新的答案。 - H.-Dirk Schmitt

打开终端窗口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。要退出英文shell,请输入exit来源:

设置LANG不足以改变所有输出。 - bitmask
@bitmask 是这样的:LANG=en_US.UTF-8 && LC_ALL=en_US.UTF-8 && LANGUAGE=en_US.UTF-8 bash 更好吗? - BuZZ-dEE
2实际上,应该是 LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANGUAGE=en_US.UTF-8 $SHELL - bitmask
只有 LC_ALL=C bash 对我有效。 - liquide

这是通过locale设置进行配置的,可以通过环境变量进行设置。有四层变量;设置的第一个优先级最高:
  • LANGUAGE — 不要使用它,它很少有用并且可能导致错误。不幸的是,一些Ubuntu版本会设置它,所以你可能需要取消设置。
  • LC_ALL — 覆盖特定类别的设置,主要用于希望在默认区域设置下运行的程序。不应作为全局设置使用。
  • LC_开头的特定类别变量: LC_CTYPELC_MESSAGESLC_TIME等。
  • LANG — 设置所有类别的默认区域设置,用于全局用户设置。
“plain” 语言环境,所有消息未翻译,默认时间和数字格式,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?我不知道你用的是哪个操作系统,但在Ubuntu上,默认情况下始终通过安装程序和各种图形界面使用LANGUAGE。顺便问一下,那些错误是什么?我还阅读了你提供的链接中的答案,尽管其中包含有用的通用信息,但对于Ubuntu桌面来说,这些建议并不是好的建议。 - Gunnar Hjalmarsson
@GunnarHjalmarsson LANGUAGE的主要问题是它优先于LC_ALL,这会导致程序出现错误。因为程序将LC_ALL设置为获取可预测的输出,但由于没有得到预期的输出而感到困惑。 - Gilles 'SO- stop being evil'
嗯,Ubuntu的图形用户界面(GUI)会一致地设置LANG和LANGUAGE(而LC_MESSAGES继承自LANG),这应该可以防止那种混淆的情况发生。设置LANGUAGE的原因是语言支持有一个界面可以设置优先级列表。 - Gunnar Hjalmarsson
@GunnarHjalmarsson 我知道。设置LANGUAGE是个不好的主意,因为好处很少,而且错误可能会让人烦恼且难以找到。不过你是对的,我应该提到取消设置LANGUAGE - Gilles 'SO- stop being evil'
回答这里不是一个适合讨论设计问题的地方。此类讨论最好在ubuntu-devel-discuss等地开展。为了对用户有帮助,我真的认为答案应该基于当前的设计,无论您是否认为它是最佳的。请注意,“某些版本”包括所有支持的Ubuntu桌面版和衍生版本,可能不包括Kubuntu。 - Gunnar Hjalmarsson
@GunnarHjalmarsson 我已经更新了我的回答,讨论了LANGUAGE - Gilles 'SO- stop being evil'
看到了。所以现在它至少能正常工作。 ;) - Gunnar Hjalmarsson

在你的~/.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,则以下设置都不起作用。

https://help.ubuntu.com/community/Locale


1我不知道为什么这个答案被踩了。是的,它可能需要更多的解释,但与被接受的答案不同的是,它展示了如何使其永久,并且更具体。 - xeruf
我希望得到的答案是仅翻译文本。对于我的情况,这是最好的答案。我想要法语输出(包括完整的Unicode,例如提交消息),但输出应为英语。这已经完成。 - Maïeul

最简单的方法是按下Alt+F2打开终端并运行此命令:
env LANGUAGE=en gnome-terminal

与Fedora(30)中的语言更改/切换设置相关的错误 例如:从英语到本地语言再到英语
存在一个环境变量无法切换回英语,例如从保加利亚语(bg)切换。
# LANGUAGE=en_GB:bg

必须更改为:

# LANGUAGE=en_GB:en

解决方案(去掉#并执行):
# export LANGUAGE=en_GB:en

  1. 点击左侧的齿轮图标(Unity面板上的系统设置)
  2. 点击语言支持
  3. 选择区域格式
  4. 将“显示数字、日期和货币金额…”设置为英语。
  5. 注销会话并重新登录(必需!)

完成。


要永久将终端语言更改为英语,请使用以下命令:
echo 'export LANG=C' >> ~/.bashrc && exec "$BASH"