一位朋友在他的服务器上运行 CentOS 5.8。这是一个基本无害的错误,但我已经厌倦了看到它。我更熟悉 debian,所以我不知道如何生成或重新配置语言环境。我习惯使用的常用二进制文件(locale-gen、dpkg 等)不在此服务器上。
[root@localhost]# git pull origin master
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_GB:en",
LC_ALL = "en_US.utf8",
LANG = "en_GB"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
From git.com:www
* branch master -> FETCH_HEAD
Already up-to-date.
一切看上去都很好。
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8
并且它是一个受支持的语言环境。
[root@localhost]# locale -a | grep en_US
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
答案1
的内容是什么/etc/sysconfig/i18n
?
我通常会在该文件中设置我的所有服务器LANG="C"
。它是我构建脚本的一部分,但多年来它帮助我避免了终端和模拟问题。稍后我会用真正的解释来更新它。
#/etc/sysconfig/i18n
LANG="C"
SYSFONT="latarcyrheb-sun16"
答案2
这里的问题是,您在个人系统上使用的区域设置与您在服务器上安装的区域设置不同ssh
。
您的本地系统使用 ,en_GB
而远程系统使用en_US.utf8
。(或者我可能把它们颠倒了……无论如何,它们都不匹配。)
因此,当您ssh
进入系统时,您的语言环境设置会被传递,但远程系统没有安装语言环境来处理该en_GB
语言,因此它会恢复到该C
语言环境。
您可以通过以下三种方式之一解决此问题:
答案3
这似乎是 perl 的问题。较新版本的 perl 没有这个问题。查看我的系统的输出:
$ perl -v
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US.UTF-8",
LC_ALL = "en_US.UTF-8",
LC_TYPE = "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").
这是为 x86_64-linux-thread-multi 构建的 perl,v5.8.6
现在看看这个输出:
$ LC_ALL=C perl -v
This is perl, v5.8.6 built for x86_64-linux-thread-multi
Copyright 1987-2004, Larry Wall
好像 perl 5.8.6 不喜欢 UTF-8 输出?设置 LC_ALL=C 可以消除警告。
我安装了另一个版本的 perl (5.18),它可以在 UTF-8 设置下运行,没有任何警告。