ロケール

提供: ArchWiki
2024年8月17日 (土) 19:16時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (ローカリゼーションに変更)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

ロケール (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

/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 で定義されています。

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

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

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

$ unset 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 ページに存在します。

{{Note|複数の環境変数が設定されている場合の優先順位は [GNU gettext のドキュメント]に述べられています。

LANG: デフォルトロケール

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

例えば、数値や日付などはスペイン語表記にしつつメッセージを英語で表示するには、LANGes_ES.UTF-8 に、LC_MESSAGESen_US.UTF-8 に設定します。

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) は別のパラメータを使って指定するようになっています。また Firefox 57以降では LC_TIME が考慮されていません (Bug 1429578)。

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 などで使うテスト用あるいはトラブルシューティング用の変数です。

トラブルシューティング

エンコードの問題については 文字コード#トラブルシューティング を確認してください。

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

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

参照