ARCHIVESDRIVE HB

オイラはホームベーカリー!

cannot change locale をやっつける

cloud.vagrant あたりとか kitematic あたりから Docker のコンテナ持ってくて ja_JP.UTF8 をロケール設定すると、たまに以下のようになることがあります。

[vagrant@localhost ~]$ sudo su - root
Last login: Mon Aug  6 14:10:20 JST 2018 on pts/0
-bash: warning: setlocale: LC_CTYPE: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (ja_JP.utf8): No such file or directory

なんとかする。

ロケ地:CentOS 7.5 ( Vagrant )

ロケールの一覧

まずロケールの一覧に対象となる ja_JP.UTF8 が無いのでは?

[root@localhost ~]# locale -a
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_COLLATE to default locale: No such file or directory
C
POSIX
en_AG
en_AG.utf8
en_AU
en_AU.iso88591
en_AU.utf8
en_BW
en_BW.iso88591
en_BW.utf8
en_CA
en_CA.iso88591
en_CA.utf8
en_DK
en_DK.iso88591
en_DK.utf8
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.iso88591
en_HK.utf8
en_IE
en_IE.iso88591
en_IE.iso885915@euro
en_IE.utf8
en_IE@euro
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ
en_NZ.iso88591
en_NZ.utf8
en_PH
en_PH.iso88591
en_PH.utf8
en_SG
en_SG.iso88591
en_SG.utf8
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
en_ZA
en_ZA.iso88591
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW
en_ZW.iso88591
en_ZW.utf8

ないな!よし!

ロケールを追加する

以下のコマンドで ja_JP.UTF8 を追加して、結果を確認します。

[root@localhost ~]# localedef -f UTF-8 -i ja_JP ja_JP
[root@localhost ~]# localectl list-locales | grep -i ja
ja_JP
ja_JP.utf8

わぁい追加されたぞ。

改めてロケールを変更する

現在のロケールを確認して /etc/locale.conf を読み込みます。必要なら set-locale を再度実行してください。

[root@localhost ~]# localectl set-locale LANG=ja_JP.utf8
[root@localhost ~]# localectl status
   System Locale: LANG=ja_JP.utf8
       VC Keymap: us
      X11 Layout: n/a
[root@localhost ~]# source /etc/locale.conf

これでおわり

僕は US 配列キーボードマンなのでこれで終了です。日本語配列の 106 キーご利用であったりする場合は、以下の記事をご参考にされると良いかと。

Dockerで立てたCentOS7コンテナの日本語環境とかtimezone設定とか

そもそも en_US.UTF8 でもいいだろ、というか僕も確かに普段はそのようにして運用している派なのですが、某社のプロプライエタリフレームワークが、日本語表示しようと思ったら UTF8 使ってても、サーバのロケールja_JP.UTF8 じゃないと、エラーを吐いて動かないという……。アプリケーションが悪いのか、フレームワークそのものが悪いのか、うーん。