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


506

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

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   

如何解决此错误?




适用于所有用户的永久性永久修复程序:askubuntu.com/questions/881742/…–
Galvani,

Answers:


513

首先运行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=

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

$ 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.

现在,您将不再看到任何错误!


220
不适用于我
Umair 2014年

4
这在许多系统上为我工作。有没有办法在新安装的系统上避免此问题?
Brylie Christopher Oxley,2015年

13
@UmairAyub可能是您有多个未知语言环境,请尝试以下操作:对于$(locale | cut -d'='-f 2 | sort | uniq)中的y;执行locale-gen $ y; 完成它将为您具有的每个定义生成一个语言环境
Ivan Buttinoni

3
注销和登录可能会有所帮助
SMMousavi

4
@Umair在此问题中人为错误的风险很高。系统en_GB默认配置为,但将其设置为en_US。您必须手动意见en_GB并取消en_US/etc/locale.gen。请参阅硬件Raspberry Pi 3b和系统Raspbian Jessie中的我的问题askubuntu.com/a/790373/25388
莱奥波尔德·赫兹(LéoLéopoldHertz)2016年

366

在我的情况下(Ubuntu Server 12.04LTS),以上建议均不起作用。最终有帮助的是将文件提交/etc/environment

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

由于某种原因,它丢失了。语言环境和其他命令的输出似乎正确定义了变量。换句话说,不要将所有基本内容都声明在应该声明的位置。


115
是的,除此以外,没有其他工作可用,可能是由于更新版本。但是我宁愿把它放进去/etc/default/locale
2013年

27
已更新/etc/default/locale,没有更多警告。谢谢
ohho 2013年

7
是的,其他人没有为我工作。这个做了。这是我用于无人值守更新的单线。 sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman

12
@ user163207您的解决方案是错误的,因为它会附加(而不是覆盖),而不是推荐的文件,并且echo需要在启用反斜杠转义的解释的情况下运行。这与您的相同,但具有上述固定方法:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
glarrain

13
别忘了重新登录!
SMMousavi

149

它们应在发布后消失:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales 

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


9
我很高兴一年前遇到的麻烦帮助您解决了此问题;)
Rinzwind,2012年

1
默认情况下不应该生成此语言环境吗?我的意思是enen_AUen_CAen_GB是默认存在但不是en_US
Daniel Serodio 2012年

@Rinzwind非常感谢您的努力!我深感抱歉; 我应该更好地措辞我的问题。我要问的是:为什么在生成新的语言环境之后必须重新配置语言环境软件包?在我看来,即使没有语言环境,语言环境也能正常工作dpkg-reconfigure
维克多

在Docker容器中使用Ubuntu 14.04,因此未设置任何内容。Django makemessage需要这个。这很好用!谢谢。
贾斯汀

1
我意识到raspbian不在这里,但我想我要提到的是,在LC_ALL正确设置之前,我必须先注销和登录。
MatrixManAtYrService

119

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

export LC_ALL="en_US.UTF-8"

2
这个好用的修复程序对我的Amazon-EC2映像有效(正在运行其默认的RHEL AMI),非常感谢!:)
gideon

这与我的Digitalocean的Ubuntu 12.04映像配合使用。
2013年

2
这解决了我的问题。我不得不问一个问题:locale-gen命令为什么没有设置LC_ALL,就像上面这个回答中所说的那样?
alexserver

很奇怪,以上所有解决方案都不适用于我,但是这一解决方案对我来说有效!导出后,LC_ALL我终于可以使用了sudo dpkg-reconfigure locales
sobi3ch

终于在尝试了很多技巧之后,这对我来说是在kubuntu 14.04.3 lts上可行的。谢谢!
乔纳

94

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


6
我在尝试其他答案,但是忘记了我正在远程连接,直到看到您的答案。ssh服务器和客户端上的不同语言环境导致了此问题。
Hieu

2
在OSX(连接到ubuntu)上,它位于/etc/ssh_config
Michiel de Mare

一种做法是:(sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config用于服务器配置)
Albin

我无法在语言环境机器上设置LC_ALL,但是它解决了远程服务器的问题,谢谢。
亚历山大·谢伦查克

1
可能值得注意的是,您必须在本地计算机而不是远程计算机上编辑文件。
Clashsoft

72

为此有一个命令:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

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


4
这是合法的!不要忘记注销/重新加载您的shell,否则您将看不到更改。不要忘记签出批准的答案来生成和重新配置区域设置。
埃里克·齐夫科维奇

1
locale仍然运行不会显示任何utf值。
Cerin

@Cerin:Myybe,没有电话locale-gen。以前,必须要做apt-get install locales
koppor

1
这不会更改Ubuntu 16.04上的根shell的LANG,因为它在/root/.profile中被否决了。
威廉

32

在12.10上对我有用的是:

apt-get install language-pack-en-base  

此后未dpkg-reconfigure locales产生结果。


2
这是最好的答案。并不是我的语言环境设置不正确,但实际上并不存在。我认为这是类似于OP的问题,以及(“没有这样的文件或目录”,如果你的语言环境是相当清楚的设置正确的!)。
突破

1
每当我在Ubuntu 12.04上使用apt-get时,我就遇到OP问题。这完美地解决了该问题,而无需编辑任何文件。
2014年

“ language-pack-en-base已经是最新版本。”
卡林根2015年

注销和登录可能会有所帮助
SMMousavi

chroot在debian下的Ubuntu中为我工作。谢谢:)
Wyatt8740 '16

18

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


2
此评论应该获得更多的赞誉,或者至少在每个答案中都需要强调这一事实。
ni8mr 2016年

11

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

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"

在以上所有解决方案中。这是唯一为我工作的方法。
JohnnyQ '16

11

我陷入了一种奇怪的状态,即我的本地计算机设置为es,因此远程计算机(通过vagrant)的状态已设置为未处理状态。因此,我只能使用手册export=来帮助成功dpkg-reconfigure。然后系统就好了。

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales

最好!由于dpkg-recofigure显示mojibake。
东方

9

我写了一个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

不要忘记了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

ru_RU您的国家/地区代码在哪里?


7

在故障排除策略中,当前接受的答案是不够的,因为您可能会遇到人为错误。您将系统设置为,en_US但已en_GB启用了Raspberry Pi 3b ,/etc/locale.gen就像我在此处的线程中那样。您应该在中启用所有使用的语言环境/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

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

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


6

就像在Debian Wiki中所说的那样,您可以编辑/etc/locale.gen并添加所有希望在系统上得到支持的语言环境(或者取消注释,我有一个所有语言环境的列表,但我用作注释的语言除外)。然后执行

sudo dpkg-reconfigure locales

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


3

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

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en

这节省了我的屁股。...谢谢!令人难以置信的是,此区域设置被设置在多少个地方……以及KDE如何通过将我的两个不同的区域设置(is_IS用于位置,资金等,en_EN用于语言合并成一个不存在的is_EN)来搞砸事情语言环境)!啊
StFS '16

2
  1. sudo dpkg-reconfigure当“区域设置”设置无效/不匹配时,您可能还需要为已安装的应用程序运行。

    当系统区域设置设置不正确时,我进行了安装vim。后来,在修复系统区域设置后,我看到了一种情况,该情况下,vimutf-8字符错误地显示为奇怪的符号,nano并且less正确显示了它们。跑步

    sudo dpkg-reconfigure vim
    

    修复了系统设置后,似乎可以解决此问题。

  2. 我还注意到了与已经提到的相同的事情:您可能需要断开/重新连接SSH才能使更改可见。


2

将以下文本添加到~/.profile我的作品:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

我在Linode上使用Ubuntu 16.04 LTS 64位服务器。


2

当我遇到相同的问题时,这对我有用(基于dman提供的解决方案):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"

我不太确定如何在评论中添加网址。@EliahKagan
pythonhunter

1
没问题-评论旁边的日期/时间戳是直接链接到它的地方。...因此,我注意到glarrain的评论(呼吁>而不是>>)似乎是对dman的回复。我实际上不知道哪种方法是正确的或最佳的,但是如果您对此有所了解,则可以使用更多信息来扩展此答案。(您不必这样做。)
Eliah Kagan 2014年
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.