ロケール
ロケール (Locale) は glibc などのロケールに対応しているプログラムやライブラリによって使われ、テキストのレンダリング、時刻や日付、地域通貨の正しい表示、アルファベットなどの決まり事が設定されます。
ロケールの生成
ロケール名は基本的に language[_territory][.codeset][@modifier]
という形式になっています。language は ISO 639 言語コード、territory は ISO 3166 国名コード、codeset は文字集合または ISO-8859-1 や UTF-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
使用するロケールは 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
/etc/locale.conf
を修正する代わりに、以下のコマンドを実行することでも設定可能:
# 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
で定義されています。
ロケールを即座に変更する
システムやユーザーの locale.conf
ファイルを作成・編集した場合、新しく設定した値は次にログインしたときに有効になります。新しい設定をすぐに使うには LANG
の設定を解除して /etc/profile.d/locale.sh
を source してください:
$ unset LANG $ source /etc/profile.d/locale.sh
他の使用方法
環境変数で説明されている方法でロケール変数を定義することも可能です。
例えば、開発中に特定のアプリケーションをテスト・デバッグしたいとき、以下のように起動することができます:
$ 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 ページに存在します。
{{Note|複数の環境変数が設定されている場合の優先順位は [GNU gettext のドキュメント]に述べられています。
LANG: デフォルトロケール
この変数で設定されたロケールは LC_*
変数全てで使われます (明示的に別のロケールを設定した場合はそちらが優先されます)。
例えば、数値や日付などはスペイン語表記にしつつメッセージを英語で表示するには、LANG
を es_ES.UTF-8
に、LC_MESSAGES
を en_US.UTF-8
に設定します。
LANGUAGE: フォールバックロケール
gettext を使って翻訳されたプログラムは通常の変数に加えて LANGUAGE
オプションも認識します。ユーザーは ロケールの使用順序 を指定することが可能です。もし一番使用したい言語が使えない場合、デフォルトのロケールの代わりに別の似たようなロケールが使われます。例えば、アメリカ流の綴りよりも英国流の綴りを好むオーストラリアのユーザーの場合:
locale.conf
LANG=en_AU.UTF-8 LANGUAGE=en_AU:en_GB:en
LC_TIME: 日付と時刻の形式
例えば LC_TIME
が en_US.UTF-8
に設定されていた場合、日付フォーマットは "MM/DD/YYYY" になります。ISO 8601 の日付フォーマットである "YYYY-MM-DD" を使いたい場合:
locale.conf
LC_TIME=en_DK.UTF-8
LC_COLLATE: 照合順序
ソートや正規表現で使われる照合順序を管理する変数です。
例えば値を C
に設定することで ls コマンドはドットファイルを先に表示して、大文字・小文字のファイル名を後にします:
locale.conf
LC_COLLATE=C
詳しくは [3] を参照してください。
潜在的な問題を回避するため、Arch では以前 /etc/profile
で LC_COLLATE=C
と設定していましたが、現在は使われなくなっています。
LC_ALL: トラブルシューティング
この変数で設定されたロケールは常に LANG
と他の LC_*
変数よりも優先して使われます。
LC_ALL
は locale.conf
ファイルで設定できない唯一の LC_*
変数です。あくまで /etc/profile
などで使うテスト用あるいはトラブルシューティング用の変数です。
トラブルシューティング
エンコードの問題については 文字コード#トラブルシューティング を確認してください。
設定を変更しても言語が変わらない
locale.conf
以外の他のファイルによって環境変数が再定義されている可能性があります。詳しくは環境変数#変数の定義を参照してください。
GNOME などのデスクトップ環境を使用している場合、locale.conf
の設定がデスクトップ環境の言語設定で上書きされることがあります。
KDE Plasma も UI の言語を Plsama 側で変更できます。変更後にもデフォルト言語が表示されている場合、[4] にあるように ~/.config/plasma-localerc
(以前は ~/.config/plasma-locale-settings.sh
でした) を削除すると解決するはずです。
ディスプレイマネージャを accountsservice と組み合わせて使っている場合、ディスプレイマネージャ#ユーザセッションで使う言語を設定する の指示に従ってください。
LightDM は、accountsservice がインストールされている場合、自動的に accountsservice を使用してユーザのロケールを設定します。インストールされていない場合、LightDM はユーザセッションの設定を ~/.dmrc
内に保存します。望まないロケールの設定がそのファイルから取得されている可能性もあります。
カスタムのロケールを使うと問題が発生する
公式にサポートされていないロケール (例: locale-en_xxAUR) をインストールすると、次のようないくつかの問題が発生する可能性があります: デッドキー (compose キー) が一部のアプリケーションで機能しない、ロケールが存在しないとアプリケーションが報告する。
これらの問題を解決するために、カスタムのロケールをインストールした後に手動の介入が必要になります。
2つのアプローチがあります (en_XX.UTF-8
は任意のカスタムロケールに置き換えてください):
LC_CTYPE を設定する
LC_CTYPE
を公式にサポートされているロケール (例えば en_US.UTF-8
) に設定します。例えば:
/etc/locale.conf
LANG=en_XX.UTF-8 LC_CTYPE=en_US.UTF-8
Xlib データベースを修正する
以下を追加して Xlib データベースを修正します:
/usr/share/X11/locale/locale.dir
en_US.UTF-8/XLC_LOCALE en_XX.UTF-8 en_US.UTF-8/XLC_LOCALE: en_XX.UTF-8
/usr/share/X11/locale/compose.dir
en_US.UTF-8/Compose en_XX.UTF-8 en_US.UTF-8/Compose: en_XX.UTF-8