# Locale (日本語)

Linux では Locale を使ってユーザーがどの言語を使うか定義します。また、locale は使われる文字セットも定義するので、あなたの使っている言語が非 ASCII 文字を含んでいる場合、正しい locale を設定することは特に重要になります。

Locale の名前は次のフォーマットを使って定義されます:

    <lang>_<territory>.<codeset>[@<modifiers>]

## 必要なロケールを有効にする

locale がシステムで使われる前に、まず有効にする必要があります。全ての利用可能な locale を表示するには:

    $ locale -a

有効にするには、`/etc/locale.gen` ファイルの中の有効にする locale をアンコメントしてください。このファイルにはシステムで使うことができる全ての locale が含まれています。locale を無効にしたいときは戻すだけです。必要な locale を有効にした後、システムをアップデートしなくてはなりません:

    # locale-gen

現在使っているロケールを表示するには:

    $ locale

Tip: ほとんどの場合あなたのコンピュータで使われる言語はひとつだけですが、他のローケルも有効にしておくことは役に立つだけでなく時に必須でもあります。もし英語を喋らないユーザーとマルチユーザーシステムを使っている時は、そのユーザーの locale が少なくともシステムでサポートされていたほうが良いです。

### Japanese example

初めに `/etc/locale.gen` の次の行をアンコメントします:

    ja_JP.UTF-8 UTF-8

それからシステムを root でアップデートします:

    # locale-gen

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

システム全体の locale を定義するには、`locale.conf` の `/etc/locale.conf` を設定してください。

`locale.conf` では一行毎に環境変数を指定します: `LANG` 以外にも、`LC_ALL` を除く全ての `LC_*` 変数をサポートしています。

Note: `/etc/locale.conf` はデフォルトでは存在しません、手動で作らなくてはなりません。
Tip: インストール中 `locale` の出力があなたにふさわしいものだったら、次を chroot 中に実行することで時間を節約できます: `# locale > /etc/locale.conf`。

    /etc/locale.conf

    LANG="ja_JP.UTF-8"

高度な設定サンプル:

    /etc/locale.conf

    # 日本語の UTF-8 を有効にする
    LANG="ja_JP.UTF-8"

    # デフォルトのソート順を保つ (例えば '.' で始まるファイルは
    # ディレクトリのリストで最初に並ぶ)
    LC_COLLATE="C"

    # 短い月日表示を YYYY-MM-DD に設定 ("date +%c" でテスト)
    LC_TIME="en_DK.UTF-8"

デフォルトの locale は `localectl` を使うことでも設定できます、例えば:

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

詳しくは `man 1 localectl` や `man 5 locale.conf` を見て下さい。

再起動した後に設定が反映され、ログイン時の個々のセッションごとに locale が設定されます。

## フォールバック locale を設定

翻訳に gettext を使っているプログラムは、通常使われる設定と合わせて `LANGUAGE` オプションを使います。これによってユーザーは locale の リスト を指定して、使われる順番を設定できます。好ましいロケールの翻訳がなされていない場合、他のロケールがデフォルトに代わって使われることになります。例えば、オーストラリアのユーザーはアメリカ流の綴りよりも英国流のほうが好ましいかもしれません:

    /etc/locale.conf

    LANG="en_AU.UTF-8"
    export LANGUAGE="en_AU:en_GB:en"

## ユーザーごとにロケールを設定

先に触れたように、ユーザー別にシステム全体のロケールとは異なった locale を使えます。これには、`LANG` 変数のロケールの定義を `~/.bashrc` ファイルに写すことで実現できます。例えば、`ja_JP.UTF-8` ロケールを使うには:

    export LANG=ja_JP.UTF-8

ロケールは次に `~/.bashrc` が　source された時に更新されます。更新するには、ログインしなおすか、手動で source してください:

    $ source ~/.bashrc

## 照合順序を設定

照合順序、もしくは並び替え、には少し変わったところがあります。並び替えはグーフィー（間抜け動物）でありロケール毎に異なったことをします。潜在的な問題を迂回するために、Arch では `/etc/profile` で `LC_COLLATE="C"` を設定することになっていました。しかし、現在この方法は既に使われていません。同じ挙動を有効にするには、`/etc/locale.conf` に次を追加してください:

    LC_COLLATE="C"

`ls` コマンドは今ではドットファイルを先に並べ、その後に大文字、小文字のファイル名と続きます。`LC_COLLATE` の設定をしないと、ロケールの設定に従うプログラムでは `LC_ALL` や `LANG` によってソートします。しかし `LC_COLLATE` の設定は `LC_ALL` がセットされると上書きされます。このことが問題になるのならば、`LC_ALL` がセットされないように `/etc/profile` に次を加えて下さい:

    export LC_ALL=

`LC_ALL` は LC 変数の中で唯一 `/etc/locale.conf` でセットできません。

## 週の始まりの曜日を設定する

多くの国では週の初めは月曜日です。これを変えるには、`/usr/share/i18n/locales/<your_locale>` の `LC_TIME` セクションに次の行を追加・変更してください:

    week            7;19971130;5
    first_weekday   2
    first_workday   2

それからシステムをアップデートします:

    # locale-gen

Tip: もしシステムに問題が発生して、フォーラムやメーリングリスト、その他の方法で助けを求めたいときは、問題のあるプログラムから `export LC_MESSAGES=C` で出力させたメッセージを付け加えてください。これはアウトプットメッセージ（エラーやウォーニング）を英語に設定するもので、その問題がなんなのか多くの人が理解できるようになります。勿論、英語でないフォーラムに投稿するときは関係ありません。

## トラブルシューティング

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

不運なことに、ターミナルには UTF-8 をサポートしていないものがあります。違うターミナルを使ってください。UTF-8 をサポートしているターミナル:

- vte-based terminals
- gnustep-terminal
- konsole
- mlterm
- rxvt-unicode
- xterm

#### Xterm が UTF-8 をサポートしていません

xterm は、`uxterm` か `xterm -u8` で起動した時だけ UTF-8 をサポートします。

#### Gnome-terminal や rxvt-unicode が UTF-8 をサポートしていません

それらのアプリケーションを UTF-8 ロケールから起動してください。上の指示に従って `en_US.UTF-8` locale (もしくはあなたの言語の UTF-8) を有効にしてからデフォルト locale に設定して、再起動します。

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

いくつかの GUI ツールは環境変数の定義に `~/.pam_environment` を使っています。GNOME はこのファイルを読みます。

## 参照

- Gentoo Linux ローカライゼーションガイド
- Gentoo Wiki Archives: Locales
- ICU's interactive collation testing
- Free Standards Group Open Internationalisation Initiative
- The Single UNIX Specification definition of Locale by The Open Group
- Locale environment variables

Category:

- Internationalization (日本語)