mfks17's blog(Life is Good !!)

趣味や思った事を書いていくと思います

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)で怒られたときの対処

どのタイミングでなったのかは定かではない(最初からだったかもしれない)のですが、サーバにsshで接続すると

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)

となるわけです。

なので、

$ locale

ってすると

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=C
LC_CTYPE=UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

と返ってくる。

このCってやつはなんなんだと。

Unix系OSでのアプリケーションの多言語対応は、素のままの表示メッセージの翻訳を各ロケールごとに作成し、アプリケーションの実行中に逐一対応するメッセージを翻訳ファイルから探してきて表示する。LANG=Cではそれをしない、ということ。

What's ”Lang=C”

なるほど、ではこれはデフォルトがアメリカ語であるということですね。

それはわかったが、要は
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
なのです。

とりあえず、ここにあるようなやりかたで進める。

localeを変更する場合はいかの設定ファイルを書き換える。

etc/sysconfig/i18n

現在の設定を確認

$ cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

バックアップをとる

$ cp -p /etc/sysconfig/i18n /etc/sysconfig/i18n.org~

現在の設定を全てコメントアウトします。

$ sed -i 's/^/#/g' /etc/sysconfig/i18n

$ cat /etc/sysconfig/i18n
#LANG="en_US.UTF-8"
#SYSFONT="latarcyrheb-sun16"

/etc/sysconfig/i18n に「en_US.UTF-8」を使用するよう追記します。

echo 'LANG="en_US.UTF-8"' >> /etc/sysconfig/i18n

設定を確認

$ cat /etc/sysconfig/i18n
#LANG="en_US.UTF-8"
#SYSFONT="latarcyrheb-sun16"
LANG="en_US.UTF-8"

変更をかけた設定を反映させる

$ . /etc/sysconfig/i18n

エラーが出ないはず
と思ったら、でました。

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

LC_CTYPEが他と違っているのかと思い、/etc/sysconfig/i18n
LC_CTYPE="en_US.UTF-8"を追加したらうまくいきました。

でも、もやもやする。
調査がまだまだ必要です。

参考サイト様
http://pubs.opengroup.org/onlinepubs/7908799/xcu/localedef.html
http://www.gnu.org/software/libc/manual/html_node/Standard-Locales.html