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)が置かれる
aosho235
1981年生まれ。駅すぱあとの会社で新規サービスを開発しています。好きなものはOS~ミドルウェアのレイヤー、開発を楽にするためのツールやフレームワークの整備、自分自身が便利だと思うものを作ること。最新技術を追うことより、自分が自信を持って使える技術で効率的に開発することを好みます。
https://aosho235.com/
val
経路検索システム「駅すぱあと」をはじめ、全国のデータと高い信頼性をベースにさまざまなサービスを展開。
https://www.val.co.jp/
Why not register and get more from Qiita?
  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