Help us understand the problem. What is going on with this article?

ロケール(locale)まとめ

More than 1 year has passed since last update.

情報源

Archのwikiがとてもよくまとまっている。
man 5 localeman 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)が置かれる
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away