ロケール: 言語、地域の設定


前提


ドキュメント


ロケール

言語、地域慣例(金額・日時などの表示形式)の設定のこと。

ロケールごとの動作・表示

例: dateコマンド

タイムゾーンはロケールではなく、別途の設定。


設定の段階

システムレベル: デフォルト指定

ユーザレベル: 優先


ロケールの指定書式

言語_国.文字コード

ロケール例

POSIXロケールは未指定の場合のデフォルトロケールを意味し、Cとしても同じ。いわばコンピュータのロケールで言語は英語のはず。


利用可能なロケール: localeコマンド

locale --all-locales

# Docker ubuntu:18.04
C
C.UTF-8
POSIX

# Docker centos:7
C
POSIX
en_AG
(略)

ロケール定義ファイル

定義ファイルをもとに、localedefコマンドで、利用可能なロケールに追加する仕組み。


ロケール定義の追加: localedefコマンド

Dockerイメージ(ubuntucentos)にja_JP.utf8がないため、定義に追加する。

localedef --charmap UTF-8 --inputfile ja_JP ja_JP.UTF-8

ロケール定義の追加: ubuntuイメージの場合

localedefを(直接)使わない方法もある。

# /etc/locale.genのja_JP行のコメントをはずす
sed -i 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
# 定義追加
locale-gen

または、language-pack-jaパッケージをインストールでもよい。


ロケールの適用

利用可能なロケールの中から選び、環境変数LANGで指定する。

環境変数LANG: デフォルトのロケール

export LANG=ja_JP.UTF-8

環境変数LC_*: 個別用途

LC_から始まるもの。未指定なら、LANGの値が適用。

例外は、(一時的な)上書き用のLC_ALLで、他の個別の値より優先。


動作例

変数=ロケール コマンドのように実行すると、その瞬間だけの値をコマンドに渡せる。

# LC_側があれば優先
LANG=C  LC_TIME=ja_JP.utf8  date
2019年  5月 17日 金曜日 12:14:22 JST


# 空にすると、POSIXロケール
LANG=  LC_TIME=  LC_ALL=  date
Fri May 17 12:14:44 JST 2019


# LC_ALLが最優先
LANG=ja_JP.utf8  LC_TIME=ja_JP.utf8  LC_ALL=C  date
Fri May 17 12:20:53 JST 2019