情報源
Archのwikiがとてもよくまとまっている。
man 5 locale
やman 7 locale
にも情報がある。
基本的にロケールはlibcの機能だと知っていると理解が進むと思う。
現在のロケール設定を確認するにはlocaleコマンド
# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
システムにインストールされているロケールの一覧を確認するにはlocale -a
# locale -a
C
POSIX
ja_JP.utf8
またはlocaledef --list-archive -v
。
システムに使いたいロケールがインストールされていない場合
自分でロケールのソースからコンパイルすればよい。やり方はディストリビューションによって異なるが、locale-gen
コマンドがある場合はそれを使う。
locale-gen
はシェルスクリプトになっていて、内部で
localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
に相当することをやっている。
環境変数の意味と優先順位
環境変数 | 意味 |
---|---|
LC_CTYPE | 文字の分類および大文字/小文字の変換。 |
LC_NUMERIC | 小数区切り文字 (または基数文字)、千の区切り文字、およびグループ化を指定します。 |
LC_TIME | 月の名前、曜日、一般的な完全表示や短縮表示など、日付や時刻の書式を指定します。 |
LC_MONETARY | ロケールの通貨記号、千の区切り文字、符号の位置、小数点以下の桁数など、通貨の書式を指定します。 |
LC_COLLATE | ロケールの照合順序および正規表現の定義を指定します。 |
LC_MESSAGES | ロケールのローカライズメッセージの記述言語、および肯定と否定の応答 (yes と no の文字列と表現) を指定します。 |
以上の6個はPOSIXで定義されているもの。それ以外のLC_PAPERなどはGNU C libraryの独自拡張、とman 5 locale
に書いてあった。
LANG < LC_CTYPE, LC_MESSAGE等 < LC_ALL
右に行くほど優先される。
~/.bash_profile
ではLANG
だけ設定しておけば十分。もし必要ならLC_CTYPE
などを個別に設定、さらにそれらを全て(一時的に)上書きしたい場合にLC_ALL
を使う。
シェルスクリプト内で必ずCロケールにしてsortコマンドなどを使いたい場合はLC_ALL=C
を使うと良い。
ファイルとディレクトリの配置(Arch Linuxの場合)
ファイル | 説明 |
---|---|
/etc/locale.gen | 生成すべきロケールの一覧。これは手で編集する |
/usr/bin/localedef | ロケールをコンパイルするプログラム。glibcの一部なので、CentOS等にも入っている |
/usr/bin/locale-gen | /etc/locale.genで定義された各ロケールに対してlocaledef を呼び出すシェルスクリプト |
/usr/share/i18n/locales/ |
localedef でコンパイルする入力ファイルが置かれる |
/usr/lib/locale/locale-archive |
localedef でコンパイルされたロケールの実体 |
/usr/share/locale/ | gettextで使用する翻訳ファイル(*.mo)が置かれる |