基本中の基本だったけど、さっき忘れていて LC_ALL が LANGUAGE より優先されると思ってしまってた。まずい。
各種 locale の仕様
- IEEE Std 1003.1-2017 locale
- Linux locale(1)
- Linux locale(5)
- Linux locale(7)
- FreeBSD locale(1)
- OpenBSD locale(1)
- Apple locale(1)
- GNU gettext
A locale is composed of several locale categories, see Aspects. When a program looks up locale dependent values, it does this according to the following environment variables, in priority order:
1. LANGUAGE
2. LC_ALL
3. LC_xxx, according to selected locale category: LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES, ...
4. LANG
上を読んで私の理解するところ
-
LANGUAGE
... コロン区切りで複数の言語を指定できる (PATH
みたいに) -
LC_ALL
... これを指定すると他の全てのLC_xxx
系よりも優先される -
LC_xxx
(ALL 以外) ... ない場合は LANG を参照する -
LANG
... ない場合は C ロケールを参照する
なので優先順位も LANGUAGE > LC_ALL > LC_xxx > LANG
になる。
(ただし LANGUAGE は gettext の方式に対応していなければ無視される。)
となると $HOME/.profile
には何を書くべきか?
個人設定は一番優先度の低い LANG
だけで良いと思う。
そうしておけば他のアプリケーションやコマンドラインで必要に応じて環境変数を上書きする際に混乱が少ない。