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

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   


如何解决此错误?

评论

相关:如何设置语言环境?

可能重复的区域设置变量在远程Shell中无效(perl:警告:设置区域设置失败。)

面向所有用户的永久性永久修复程序:askubuntu.com/questions/881742/…

您需要说:您的机器?还是您只有用户登录名而不能更改系统设置? (是的,我知道这是一个非常老的问题。错误答案的批评令人震惊😬)

#1 楼

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


现在您将不会看到任何错误了!

评论


没有为我工作

– Umair Ayub
2014年4月24日7:43

这在许多系统上为我工作。有没有办法避免在新安装的系统上发生此问题?

–布莱莉·克里斯托弗·奥克斯利(Brylie Christopher Oxley)
15年1月12日在17:34

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

–伊凡·巴蒂诺尼
15年6月27日在18:33

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

– S.M. Mousavi
15年11月16日在18:09

@Umair在此问题中人为错误的风险很高。默认情况下,系统配置为en_GB,但是将其设置为en_US。您必须在/etc/locale.gen中手动注释en_GB并取消注释en_US。在硬件Raspberry Pi 3b和系统Raspbian Jessie中查看我的答案askubuntu.com/a/790373/25388。

–LéoLéopoldHertz준영
16年6月22日在20:27

#2 楼

在我的情况下(Ubuntu Server 12.04LTS),以上建议均不起作用。最终使
有用的东西被放到了文件/etc/environment中:

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


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

评论


是的,除此以外,没有其他工作可用,可能是由于更新版本。但是我宁愿将其放在/ etc / default / locale中。

–否
13年2月22日在20:18

更新了/ etc / default / locale,没有更多警告。谢谢

– ohho
13年2月26日在7:00

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

– dman
2014年3月22日6:01



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

–格兰林
2014年4月9日在21:22



别忘了重新登录!

– S.M. Mousavi
15年11月16日在18:05

#3 楼

它们在发出后应该消失:

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



dpkg-reconfigure已经安装它们后重新配置软件包。向其传递要重新配置的一个或多个软件包的名称。
它将询问配置问题,就像第一次安装该软件包的时间一样。

评论


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

–灵风
2012年7月11日14:34

默认情况下不应该生成此语言环境吗?我的意思是默认情况下存在en,en_AU,en_CA,en_GB,但不存在en_US?

–Daniel Serodio
2012年8月15日16:05

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

–维克多
2012年11月18日在11:49

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

–贾斯汀
2014年8月11日18:05

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

– MatrixManAtYrService
17-12-29在18:27

#4 楼

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

export LC_ALL="en_US.UTF-8"


评论


这个甜蜜的修复对我的Amazon-EC2映像有效(正在运行其默认RHEL AMI)非常感谢! :)

–基甸
2012年12月1日15:07

这个与我的Digitalocean的Ubuntu 12.04映像一起为我工作。

–安南
2013年9月25日上午11:49

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

– alexserver
2015年9月21日在18:35

很奇怪,以上所有解决方案都不适用于我,但是这个解决方案对我来说有效!导出LC_ALL之后,我最终可以使用sudo dpkg-reconfigure语言环境。

– sobi3ch
15年11月18日在11:56

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

–乔纳
16年1月8日在20:44

#5 楼

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

评论


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

– Hieu
2015年2月27日在6:32

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

– Michiel de Mare
2015年6月3日,10:01

单线执行此操作:sed -e'/ SendEnv / s / ^#* /#/'-i / etc / ssh / ssh_config(用于服务器配置)

– Albin
15年6月16日在16:57

我无法在语言环境计算机上设置LC_ALL,但是它解决了远程服务器的问题,谢谢。

–亚历山大·Shlenchack
16-8-26在20:33



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

– Clashsoft
18年7月9日在18:08

#6 楼

有一个命令可以用于:
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

使用提供的值更新/etc/default/locale
要应用更改,您可以
source /etc/default/locale


评论


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

–埃里克·齐夫科维奇(Erik Zivkovic)
16-2-8在10:28



运行语言环境仍然不会显示任何utf值。

–塞林
17年4月18日在23:00

@Cerin:Myybe,缺少对locale-gen的电话。在此之前,必须先执行apt-get安装区域设置。

– koppor
17年8月16日在6:19

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

–威廉
17年12月31日在16:44

#7 楼

在12.10上对我有用的是:

apt-get install language-pack-en-base  


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

评论


这是最好的答案。并不是我的语言环境设置不正确,但实际上并不存在。我认为这也与OP的问题类似(如果您的区域设置正确,则“没有这样的文件或目录”非常清楚!)。

–突破
13-10-27在21:49

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

–Deepend
2014年6月10日上午10:13

“ language-pack-en-base已经是最新版本。”

–卡林根
15年8月10日在7:51

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

– S.M. Mousavi
15年11月16日在18:09

在debian下为我在ubuntu chroot中工作。谢谢 :)

–Wyatt8740
16-2-18在13:25



#8 楼

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

评论


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

–ni8mr
16 Dec 9'在14:24

#9 楼

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

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


评论


在以上所有解决方案中。这是唯一对我有用的方法。

–JohnnyQ
16年5月11日在6:56

#10 楼

我陷入了一种奇怪的状态,即我的本地计算机设置为es,因此(通过vagrant)已将远程计算机设置为未处理状态。因此,我只需要使用手册export=来帮助顺利完成dpkg-reconfigure。这样系统就可以了。

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


评论


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

–托米洛夫·阿纳托利(Tomilov Anatoliy)
17年6月28日在13:47

#11 楼

我写了一个bash脚本来解决上述问题。以上答案很有用,但仅通过导出shell变量中的值来设置区域设置变量仅适用于会话。我通过在.bash_profile文件中导出区域设置变量来永久解决此问题。您也可以使用/etc/profile文件而不是.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并按照脚本进行轻松设置。

#12 楼

您可以尝试:

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是您的国家/地区代码。

#13 楼

在故障排除策略中,当前接受的答案是不够的,因为您可能会遇到人为错误。
您将系统设置为en_US,但是在en_GB中启用了/etc/locale.gen,就像我在此处为Raspberry Pi 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


现在,我在任何命令中都不会遇到那些语言环境错误。

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

#14 楼

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

sudo dpkg-reconfigure locales


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

#15 楼

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

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


评论


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

– pythonhunter
2014年8月27日6:28



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

– Eliah Kagan
2014年8月27日在6:32

#16 楼

如果使用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年5月27日在11:05

#17 楼



当“语言环境”设置无效/不匹配时,您可能还需要为已安装的应用程序运行sudo dpkg-reconfigure

系统语言环境设置错误时,我安装了vim 。后来,在修复系统区域设置后,我看到一种情况,vim将utf-8字符错误地显示为奇怪的符号,而nanoless正确地显示了它们。在修复系统设置后,运行

sudo dpkg-reconfigure vim


似乎可以解决此问题。需要断开/重新连接SSH才能使更改可见。


#18 楼

将以下文本添加到~/.profile对我有用:

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


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

#19 楼

问题的根源

我经历了这一点,通过ssh从一台计算机登录到另一台计算机。远程计算机没有本地计算机上的语言环境文件。您可以禁用从本地计算机到远程计算机的语言环境转发(在文件/etc/ssh/sshd_config中删除行AcceptEnv LANG LC_CTYPE …),也可以安装语言环境(在这种情况下无需更改)。

在Fedora,RHEL,Redhat和CentOS上安装
我在德语(de)语言包中使用过

sudo dnf install langpacks-de


。注销并登录即可。

使用

dnf search langpacks-
搜索其他langpack

更改/激活

到列出我使用的可用语言环境

localectl list-locales


并设置一个新的语言环境

sudo localectl set-locale de_DE.utf8


评论


dnf不是Ubuntu或Flavor命令,这对本站点有什么帮助? askubuntu.com/help/on-topic

– Guiverc
9月29日7:59

这个问题不是专门针对Ubuntu的问题。我在第一段中给出了一般性说明。然后是一个在我遇到问题的特定发行版上的示例。基本知识是如何将其转换为另一个发行包管理系统。

–erik
9月30日8:34

如果您想发布此答案,我觉得这个问题应该在SE Unix&Linux上重新提出,并且在那里使用了答案,因此成为话题。

– Guiverc
9月30日8:38

我的回答绝对是话题。没有一个答案能说明真正的问题是什么,问题的根源。软件包安装很简单,或者应在其他问题中询问。在所有发行版(包括Debian或Ubuntu)上,它都非常相似。该解决方案的其余部分可以在每个现代linux发行版上正常工作。我明确提到了我的发行版。您可以添加Debian / Ubuntu命令,而不用抱怨。那会有所帮助。

–erik
9月30日16:16