将命令输出语言从母语切换为英语


84

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


5
这有点误导。人们实际上没有必要这样做。(如果您认为我们应该要求操作员以这种方式负担自己,请在指示任何人这样做之前在meta上发布。)他们可以LANG像这样进行更改,这可能会有所帮助,但是我们不需要复制的错误消息使用英语。我们要求作者写的是英文(尽管我们通常翻译它而不是关闭问题)。因此,用英语写的带有西班牙语末尾文字的问题就可以了,而用西班牙语写的带有英语末尾文字的问题就不行了。
伊利亚·卡根

4
@EliahKagan是的,您是对的,但是无论如何我认为这很有用。
BuZZ-dEE

2
我同意,这对于人们能够这样做非常有用,并且很好,您已经发布了这个问题!但是,很重要的一点是,人们知道我们不要求他们这样做(但确实要求问题和答案自己用英语书写)。
伊利亚·卡根

8
@EliahKagan相反,发布实际的错误消息非常重要,并且以英语发布它们非常可取,因为这是该网站的主要受众可以识别和测试的内容。(而且永远也不要发布经过重新翻译的错误消息。请务必复制粘贴,因为确切的用词,标点符号,甚至间距都可能很重要。)
Gilles 2014年

Answers:



13

终端的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以避免某些程序的misbehaviours。

适应您的语言

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

env |egrep -e 'LC_ALL|LANG'

脚本是否需要更改为德语(DE)以外的其他语言?我寻找独立于母语的解决方案。
BuZZ-dEE

@ BuZZ-dEE:您可以(可能应该)通过丢弃case和指定输入以使其符合<lang>_<country>格式来轻松地对此进行调整。然后,您可以假设UTF-8通过它。如果您真的很想一个整洁的解决方案,则应该检查用户输入是否正确,locale -a以确保实际安装了所请求的语言环境。
位掩码

@ buzz-dee:请参阅更新的答案
H.-Dirk Schmitt 2013年

7

打开终端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足够的机会,所有的输出。
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
位掩码

只有LC_ALL = C bash对我有用
Liquide's

5

这是通过可通过环境变量设置的语言环境设置来配置的。有四层变量;设置的第一个优先:

  • LANGUAGE—不要使用它,它很少有用,并且可能导致错误。不幸的是,某些版本的Ubuntu对其进行了设置,因此您可能需要取消设置。
  • LC_ALL—覆盖类别特定的设置,主要是要由要在默认语言环境中运行的程序使用。不打算用作全局设置。
  • 特定类别的变量开头LC_LC_CTYPELC_MESSAGESLC_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?我不知道您使用的是哪个操作系统,但是默认情况下始终在Ubuntu上通过安装程序和各种GUI使用LANGUAGE。顺便说一句,那些错误是什么?我还阅读了您链接到的答案,即使它包含有用的常规信息,推荐也不是在Ubuntu桌面上的好建议。
Gunnar Hjalmarsson 2014年

@GunnarHjalmarsson的主要问题LANGUAGE是它的优先级高于LC_ALL,这会导致错误,因为程序设置LC_ALL为获取可预测的输出,然后由于未获得预期的输出而感到困惑。
吉尔斯2014年

好吧,Ubuntu GUI始终设置LANG和LANGUAGE(并且LC_MESSAGES继承自LANG),这应该避免这种混淆。设置语言的原因是语言支持具有用于设置优先级列表的界面。
2014年

我知道@GunnarHjalmarsson。LANGUAGE尽管如此,设置还是一个坏主意,因为这样做的好处非常渺茫,而漏洞却很烦人且难以发现。不过您说的没错,我应该提到unsetting LANGUAGE
吉尔斯2014年

这里的答案不是辩论设计问题的合适场所。这样的讨论最好在ubuntu-devel-discuss上进行。为了对用户有所帮助,我真的认为,答案应该基于当前的设计,无论您认为它是否最佳。并且请注意,“某些版本”是Ubuntu桌面及其派生版本的所有受支持版本,可能是Kubuntu除外。
Gunnar Hjalmarsson 2014年


1

在你的 ~/.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


我不知道为什么这个答案被否决了。是的,它可以使用更多的解释,但是与公认的答案不同,它显示了如何使其永久并且更加具体。
Xerus

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

做完了

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.