情報源
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)が置かれる |