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
如何解决此错误?
#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字符错误地显示为奇怪的符号,而nano
和less
正确地显示了它们。在修复系统设置后,运行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
评论
相关:如何设置语言环境?可能重复的区域设置变量在远程Shell中无效(perl:警告:设置区域设置失败。)
面向所有用户的永久性永久修复程序:askubuntu.com/questions/881742/…
您需要说:您的机器?还是您只有用户登录名而不能更改系统设置? (是的,我知道这是一个非常老的问题。错误答案的批评令人震惊😬)