如何修复我的区域设置问题?

每次我做启动或停止服务的事情时,我都会收到此消息。

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 

我该如何解决这个错误?

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

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

上面没有任何建议在我的情况下工作(Ubuntu Server 12.04LTS)。 最后帮助的是放入文件/etc/environment

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

由于某种原因,它失踪了。 区域设置和其他命令的输出看起来像变量已正确定义。 换句话说,不要理所当然地将所有基本内容声明为应该声明的地方。

他们应该在签发后消失:

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

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

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

 export LC_ALL="en_US.UTF-8" 

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

有一个命令:

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

它使用提供的值更新/etc/default/locale

在12.10对我有用的是:

 apt-get install language-pack-en-base 

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

不要忘记退出并重新登录,退出SSH会话(或X11)。 所有这些建议都不适合我,除非我重新登录….

对于Ubuntu 12.10,除了ratzs的解决方案之外,上述任何一个都没有工作。 我建议将其添加到/etc/bash.bashrc文件中:

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

我被困在一个奇怪的状态,我的本地机器设置为es ,所以远程机器(通过vagrant )已经处于未处理状态。 因此,我不得不使用手动export= only来促进成功的dpkg-reconfigure 。 然后系统很好。

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

我写了一个bash脚本来修复上面的问题。上面的答案很有用,但是通过简单地导出shell变量中的值来设置locale变量只适用于会话。 我通过在.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 

不要忘记获取.bash_profile并在简单设置中遵循脚本 。

你可以试试:

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

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

 sudo dpkg-reconfigure locales 

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

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

我只在/etc/locale.gen启用了en_GB.UTF-8 UTF-8 。 因为运行了其他命令,我应该只启用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

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

 $ cat ~/.kde/env/setlocale.sh export LANG=en_US.UTF-8 export LANGUAGE=en_US:ru:en 
  1. 在“区域设置”设置无效/不匹配时,您可能还需要为已安装的应用程序运行sudo dpkg-reconfigure

    虽然系统区域设置设置不正确,但我安装了vim 。 后来当系统区域设置被修复时,我看到vim显示utf-8字符错误地作为奇怪符号而nanoless正确显示它们的情况。 运行

     sudo dpkg-reconfigure vim 

    系统设置修复后似乎解决了问题。

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

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

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

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

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

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

在我的docker ized工作站中运行带有类似错误消息的oh-my-zsh ‘Agnoster’主题时遇到了问题。 (它比wsl IMO快,我可以通过Docker For Windows管理的Hyper-V VM将docker.sock安装到这个容器中,这允许我做docker的东西)

结合答案中的一些建议帮助我解决了这个问题。

我把它添加到我的Dockerfile

 RUN apt-get install -y locales RUN sudo locale-gen "en_US.UTF-8" RUN echo 'LANG="en_US.UTF-8"' > /etc/profile.d/locale.sh RUN echo 'LANGUAGE="en_US.UTF-8"' >> /etc/profile.d/locale.sh RUN echo 'LC_ALL="en_US.UTF-8"' >> /etc/profile.d/locale.sh 

在此处输入图像描述

如果你想尝试一下,这是一个要点。