
一位朋友在他的伺服器上運行 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 設置,沒有任何警告。