如何解决我的语言环境问题?

Hac*_*ell 558 server command-line locale

每次我执行诸如启动或停止服务之类的操作时都会收到此消息。

perl: warning: Setting locale failed.   
perl: warning: Please check that your locale settings:   
        LANGUAGE = "en_US:en",   
        LC_ALL = (unset),   
        LC_MESSAGES = "en_US.UTF-8",   
        LANG = "en_US.UTF-8"   
    are supported and installed on your system.   
perl: warning: Falling back to the standard locale ("C").   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   
(Reading database ... 21173 files and directories currently installed.)  
Removing bind9 ...  
 * Stopping domain name service... bind9                                        [ OK ]
Processing triggers for man-db ...   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

小智 557

首先运行locale以列出当前为当前用户帐户定义的语言环境:

$ locale
LANG=C
LANGUAGE=
LC_CTYPE=fi_FI.UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE=fi_FI.UTF-8
LC_MONETARY="C"
LC_MESSAGES=fi_FI.UTF-8
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

然后生成缺少的语言环境并重新配置语言环境以注意:

$ sudo locale-gen "en_US.UTF-8"
Generating locales...
  en_US.UTF-8... done
Generation complete.

$ sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.
Run Code Online (Sandbox Code Playgroud)

现在你不会再看到任何错误了!

  • 对我不起作用 (249认同)
  • @UmairAyub 可能你有不止一个未知的语言环境,试试这个:**for y in $(locale | cut -d '=' -f 2| sort |uniq );do locale-gen $y; done** 它将为您拥有的每个定义生成一个语言环境 (13认同)
  • 注销和登录可能会有所帮助 (5认同)
  • @Umair 在这个问题中存在很高的人为错误风险。您的系统默认配置为“en_GB”,但您将其设置为“en_US”。你必须在`/etc/locale.gen` 中手动注释`en_GB` 并取消注释`en_US`。在硬件 Raspberry Pi 3b 和系统 Raspbian Jessie 中查看我的回答 http://askubuntu.com/a/790373/25388。 (5认同)
  • 这在许多系统上对我有用。有没有办法在新安装的系统上避免这个问题? (4认同)

小智 400

在我的情况下,上面建议的任何内容都不起作用(Ubuntu Server 12.04LTS)。最终有帮助的是放入文件/etc/environment

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它不见了。语言环境和其他命令的输出看起来像是正确定义了变量。换句话说,不要想当然地认为所有基本的东西都在应该声明的地方声明。

  • 是的,除了这个,没有其他工作,也许是由于更新的版本。但我更喜欢把它放在 `/etc/default/locale` 中。 (125认同)
  • 更新了 `/etc/default/locale` 并且不再有警告。谢谢 (29认同)
  • @user163207 您的解决方案不正确,因为它附加(而不是覆盖),它不是推荐的文件,并且需要在启用反斜杠转义解释的情况下运行 `echo`。这与您的相同,但具有上述固定内容:`sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"` (15认同)
  • 不要忘记登录并重新登录! (13认同)
  • 是的,其他人对我不起作用。这个做到了。这是我用于无人值守更新的单线。`sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"` (8认同)
  • 我在我的 Ubuntu Cloud Image 中面临同样的问题 (2认同)
  • 需要退出会话并重新登录 (2认同)

Rin*_*ind 165

它们应该在发出后消失:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales 
Run Code Online (Sandbox Code Playgroud)

dpkg-reconfigure在安装包后重新配置包。将一个或多个包的名称传递给它以进行重新配置。它会询问配置问题,就像第一次安装软件包时一样。

  • 我很高兴我一年前的麻烦帮助你解决了这个问题;) (10认同)
  • 我意识到 raspbian 超出了这里的范围,但我想我应该提到在正确设置“LC_ALL”之前我必须注销并登录。 (2认同)

小智 131

只需将以下内容添加到您的.bashrc文件中(假设您使用的是 bash)

export LC_ALL="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

  • 这个甜蜜的修复在我的 Amazon-EC2 映像上对我有用(正在运行他们的默认 RHEL AMI)非常感谢!:) (2认同)
  • 这解决了我的问题。我不得不问一个问题:为什么 LC_ALL 不是由 locale-gen 命令设置的,就像上面这个其他答案所说的那样? (2认同)

小智 104

如果您远程连接,这是一个常见问题,因此解决方案是不转发您的区域设置。编辑/etc/ssh/ssh_config并注释掉SendEnv LANG LC_*行。

  • 我正在尝试其他答案,但在看到您的答案之前忘记了我是远程连接。ssh 服务器和客户端上的不同语言环境导致了问题。 (6认同)
  • 在 OSX(连接到 ubuntu)上,它位于 `/etc/ssh_config` (2认同)
  • 可能值得注意的是,您必须在本地计算机而不是远程计算机上编辑文件。 (2认同)

小智 81

有一个命令:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

/etc/default/locale使用提供的值进行更新。

要应用更改,您可以

source /etc/default/locale
Run Code Online (Sandbox Code Playgroud)

  • 这是合法的!不要忘记注销/重新加载您的外壳,否则您将看不到更改。不要忘记查看已批准的生成和重新配置语言环境的答案。 (5认同)
  • 运行 `locale` 仍然没有显示任何 utf 值。 (2认同)
  • 这不会更改 Ubuntu 16.04 上 root shell 的 LANG,因为它在 /root/.profile 中被否决。 (2认同)

小智 35

在 12.10 上对我有用的是:

apt-get install language-pack-en-base  
Run Code Online (Sandbox Code Playgroud)

这是在dpkg-reconfigure locales没有结果之后。

  • 这是最好的答案。并不是我的语言环境设置不正确,而是它们实际上并不存在。我认为这也类似于 OP 的问题(如果您的语言环境设置正确,“没有这样的文件或目录”就很清楚了!)。 (2认同)

小智 21

不要忘记通过退出并重新登录来退出 SSH 会话(或 X11)。除非我重新登录,否则所有这些建议对我都不起作用....

  • 这个评论应该得到更多的支持,或者至少在每个答案中都需要强调这个事实。 (2认同)

小智 12

对于 Ubuntu 12.10,除了 Ratzs 的解决方案外,上述方法均无效。我建议将此添加到您的 /etc/bash.bashrc 文件中:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Run Code Online (Sandbox Code Playgroud)


Cha*_*aye 12

我陷入了一种奇怪的状态,我的本地机器被设置为es,因此远程机器(via vagrant)已被配置为未处理状态。因此,我不得不使用手册export=来促进成功的dpkg-reconfigure. 然后系统就好了。

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)


Aje*_*han 10

我编写了一个bash 脚本来解决上述问题。上述答案很有用,但通过简单地导出 shell 变量中的值来设置语言环境变量仅适用于会话。我通过导出 .bash_profile 文件中的语言环境变量永久解决了这个问题。您也可以使用/etc/profilefile 而不是.bash_profile.

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

不要忘记source.bash_profile,按照剧本中易于安装。


小智 8

你可以试试:

export LANGUAGE=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_NUMERIC=ru_RU.UTF-8
export LC_TIME=ru_RU.UTF-8
export LC_COLLATE=ru_RU.UTF-8
export LC_MONETARY=ru_RU.UTF-8
export LC_MESSAGES=ru_RU.UTF-8
export LC_PAPER=ru_RU.UTF-8
export LC_NAME=ru_RU.UTF-8
export LC_ADDRESS=ru_RU.UTF-8
export LC_TELEPHONE=ru_RU.UTF-8
export LC_MEASUREMENT=ru_RU.UTF-8
export LC_IDENTIFICATION=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8
Run Code Online (Sandbox Code Playgroud)

ru_RU你的国家代码在哪里。


Léo*_* 준영 7

当前接受的答案在故障排除策略中是不够的,因为您可能会出现人为错误。您设置您的系统,en_US但你必须en_GB在启用/etc/locale.gen像我曾在线程这里的树莓派3B。你应该有所有在启用了您使用的语言环境/etc/locale.gen

en_GB.UTF-8 UTF-8只在/etc/locale.gen. 我应该只启用它,en_US.UTF-8 UTF-8因为它运行了其他命令。所以我评论了 GB 和未评论的美国,现在一切正常

masi@raspberrypi:~ $ sudo vim /etc/locale.gen

masi@raspberrypi:~ $ sudo locale-gen 
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

masi@raspberrypi:~ $ sudo a2enmod rewrite && a2enmod headers && a2enmod ssl
Module rewrite already enabled
Module headers already enabled
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled
Run Code Online (Sandbox Code Playgroud)

现在,我没有使用任何命令遇到这些语言环境错误。

系统:Raspbian Jessie
硬件:Raspberry Pi 3b


msr*_*rd0 6

正如Debian Wiki 中所述,您可以编辑/etc/locale.gen和添加所有希望在您的系统上获得支持的语言环境(或取消注释它们,我有一个所有语言环境的列表,但除了我用作注释的语言之外的所有语言环境)。然后,执行

sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)

更新系统上的语言环境。现在,您添加/取消注释的所有语言环境/etc/locale.gen都可以在您的系统上使用而没有任何警告。


小智 5

如果您使用 KDE 环境,请检查setlocale.sh以下文件~/.kde/env/

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

1035018 次

最近记录:

4 年,11 月 前