JavaのDateFormatterで、曜日を日本語表示しようとしたときに、ja_JPロケールが入っておらずできなかったので、方法を調べた。

CentOS7

参考:

Dockerのcentos7はデフォルトではja_JPのロケールが入っていない。

$ locale -a | grep ja | wc -l
0

/etc/yum.conf に以下の設定が入っていることで、localeがen_US.utf8に制限されているためこれをいじればよい。

override_install_langs=en_US.utf8

override_install_langs の設定を消すか、 ja_JP.utf8 を追加するのだが、消すと使わないロケールもすべて入ってしまうので、追加するほうがいいだろう

$ sed -i -e '/override_install_langs/s/$/,ja_JP.utf8/g' /etc/yum.conf

この設定をしたあとでglibcを更新すると、ja_JPが使えるようになる

$ yum reinstall -y glibc-common
$ locale -a | grep ja
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

Dockerfile

FROM centos:7
 
RUN sed -i -e '/override_install_langs/s/$/,ja_JP.utf8/g' /etc/yum.conf
RUN yum reinstall -y glibc-common && yum clean all
 
ENV LANG ja_JP.UTF-8
 
CMD ["bash"]

ときどき yum update -y && yum reinstall -y glibc-common をしているDockerfileを見かけて、どういう意味があるんだろーと思っていたので謎がとけた

AmazonLinux2

現在のLocaleを確認

$ localectl status
System Locale: LANG=en_US.UTF-8×Dismiss this alert.

Localeで設定できる値を確認

$ localectl list-locales

Localeを変更

$ localectl set-locale LANG=ja_JP.utf8

Dockerコンテナ

参考:

Dockerコンテナ内でlocalectlを打つと、privilegedでないと Failed to create bus connection というエラーが出るので、別のやり方でインストールする。

yumで glibc-langpack-ja があるので、こちらをインストールする

$ yum install -y glibc-langpack-ja
...
Installed:
  glibc-langpack-ja.x86_64 0:2.26-27.amzn2.0.4                                                                                                                                                              
 
Complete!
 
$ locale -a | grep ja
ja_JP.eucjp
ja_JP.utf8
 
$ export LANG='ja_JP.utf8'
$ locale
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
 

Dockerfile

FROM amazonlinux:2
 
RUN yum install -y glibc-langpack-ja && yum clean all
ENV LANG ja_JP.utf8