ロケール

提供: ArchWiki
2018年2月6日 (火) 23:09時点におけるKusakata.bot (トーク | 投稿記録)による版 (文字列「http://www.gnu.org/」を「https://www.gnu.org/」に置換)
ナビゲーションに移動 検索に移動

関連記事

ロケール (Locale) は glibc などのロケールに対応しているプログラムやライブラリによって使われ、テキストのレンダリング、時刻や日付、地域通貨の正しい表示、アルファベットなどの決まり事が設定されます。

ロケールの生成

ロケール名は基本的に language[_territory][.codeset][@modifier] という形式になっています。languageISO 639 言語コードterritoryISO 3166 国名コードcodeset文字集合または ISO-8859-1UTF-8 などのエンコーディングです。詳しくは setlocale(3) を参照してください。

利用可能なロケールのリストを確認するには、以下のコマンドを実行:

$ locale -a

システムでロケールを利用するには、まず生成する必要があります。/etc/locale.gen の中の適当なエントリをアンコメントして locale-gen を実行することで生成できます。同じく、エントリをコメントアウトするとロケールは無効になります。変更するときは、システム上の他のユーザーが必要としている言語や特定の変数にも注意してください。

例えば日本語の ja_JP.UTF-8 UTF-8 をアンコメントする場合:

/etc/locale.gen
...
#ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
#ka_GE.UTF-8 UTF-8
...

ファイルを保存して、ロケールを生成:

# locale-gen
ノート:
  • locale-genglibc のアップデート時に毎回実行されます [1]
  • UTF-8 を使用することが推奨されています [2]

ロケールの設定

現在設定されているロケールと関連する環境設定を確認するには:

$ locale

使用するロケールは locale.conf ファイルに設定します。ファイルの中では1行毎に環境変数を設定します。locale の出力と同じフォーマットです。

生成済みの利用可能なロケールを確認するには:

$ localedef --list-archive

もしくは localectl(1) を使用:

$ localectl list-locales

システム全体のロケールを設定する

システム全体のロケールを設定するには LANG 変数を /etc/locale.conf に書き込みます。使用するロケールは /etc/locale.gen でアンコメントしたエントリの最初のカラムと同じです:

/etc/locale.conf
LANG=ja_JP.UTF-8

そして、以下のコマンドを実行:

# localectl set-locale LANG=ja_JP.UTF-8

他の設定など詳しくは変数locale.conf(5) を参照。

ユーザーセッションでシステムロケールを上書き

システム全体のロケールは ~/.config/locale.conf (または $XDG_CONFIG_HOME/locale.conf$HOME/.config/locale.conf) を作成・編集することでユーザーセッションで上書きできます。

locale.conf ファイルの優先順位は /etc/profile.d/locale.sh で定義されています。

ヒント:
  • /var/log のログは英語のままで、ユーザー環境では自分の言語を使うということが可能です。
  • /etc/skel/.config/locale.conf ファイルを作成することで useradd-m オプションで追加された新しいユーザーの ~/.config/locale.conf が自動的に生成されます。

ロケールを即座に変更する

システムやユーザーの locale.conf ファイルを作成・編集した場合、新しく設定した値は次にログインしたときに有効になります。新しい設定をすぐに使うには LANG の設定を解除して /etc/profile.d/locale.sh を source してください:

$ LANG= source /etc/profile.d/locale.sh
ノート: 最初に LANG 変数の設定を解除しないと、locale.shlocale.conf の値を反映しません。新しい、変更した変数だけが反映されます。locale.conf から削除した値はセッション内で残り続けます。

他の使用方法

環境変数で説明されている方法でロケール変数を定義することも可能です。

例えば、開発中に特定のアプリケーションをテスト・デバッグしたいとき、以下のように起動することができます:

$ LANG=C ./my_application.sh

同じく、現在のシェルから実行する全てのプロセルにロケールを設定するには (例えば、システムのインストール中などに使うと有用です):

$ export LANG=C

変数

locale.conf ファイルは以下の環境変数をサポートしています:

  • LANG
  • LANGUAGE
  • LC_ADDRESS
  • LC_COLLATE
  • LC_CTYPE
  • LC_IDENTIFICATION
  • LC_MEASUREMENT
  • LC_MESSAGES
  • LC_MONETARY
  • LC_NAME
  • LC_NUMERIC
  • LC_PAPER
  • LC_TELEPHONE
  • LC_TIME

上記の LC_* 変数の意味は locale(7) の man ページに、詳しい説明は locale(5) の man ページに存在します。

LANG: デフォルトロケール

この変数で設定されたロケールは LC_* 変数全てで使われます (明示的に別のロケールを設定した場合はそちらが優先されます)。

LANGUAGE: フォールバックロケール

gettext を使って翻訳されたプログラムは通常の変数に加えて LANGUAGE オプションも認識します。ユーザーは ロケールの使用順序 を指定することが可能です。もし一番使用したい言語が使えない場合、デフォルトのロケールの代わりに別の似たようなロケールが使われます。例えば、アメリカ流の綴りよりも英国流の綴りを好むオーストラリアのユーザーの場合:

locale.conf
LANG=en_AU.UTF-8
LANGUAGE=en_AU:en_GB:en

LC_TIME: 日付と時刻の形式

例えば LC_TIMEen_US.UTF-8 に設定されていた場合、日付フォーマットは "MM/DD/YYYY" になります。ISO 8601 の日付フォーマットである "YYYY-MM-DD" を使いたい場合:

locale.conf
LC_TIME=en_DK.UTF-8
ノート: プログラムは必ずしも変数によって指定されたフォーマットで日付を表示するとは限りません。例えば date(1) は別のパラメータを使って指定するようになっています。

LC_COLLATE: 照合順序

ソートや正規表現で使われる照合順序を管理する変数です。

例えば値を C に設定することで ls コマンドはドットファイルを先に表示して、大文字・小文字のファイル名を後にします:

locale.conf
LC_COLLATE=C

詳しくは [3] を参照してください。

潜在的な問題を回避するため、Arch では以前 /etc/profileLC_COLLATE=C と設定していましたが、現在は使われなくなっています。

LC_ALL: トラブルシューティング

この変数で設定されたロケールは常に LANG と他の LC_* 変数よりも優先して使われます。

LC_ALLlocale.conf ファイルで設定できない唯一の LC_* 変数です。あくまで /etc/profile などで使うテスト用あるいはトラブルシューティング用の変数です。

トラブルシューティング

ターミナルが UTF-8 をサポートしていません

以下は UTF-8 をサポートしているターミナルのリストです:

Gnome-terminal や rxvt-unicode

UTF-8 のロケールからアプリケーションを起動する必要があり、それ以外のロケールを使用していると UTF-8 のサポートが有効になりません。上で書いているように en_US.UTF-8 ロケール (またはあなたの地域の UTF-8 ロケール) を生成し、デフォルトのロケールとして設定して再起動してください。

設定を変更しても言語が変わらない

locale.conf 以外の他のファイルによって環境変数が再定義されている可能性があります (例: ~/.pam_environment)。詳しくは環境変数#変数の定義を参照してください。

GNOME などのデスクトップ環境を使用している場合、locale.conf の設定がデスクトップ環境の言語設定で上書きされることがあります。

参照