Table of Contents
Localeとは?
Def: Locale
Localeとは言語や単位, 記号, 日付, 通貨などの表示規則の集合のこと. ソフトウェアはロケールで指定された方式でデータの表記や処理を行う.
Ubuntuではインストール時に, 言語の設定ウィザードでの設問回答に合わせて自動的にLocaleの初期設定(locale-gen
コマンドに対応)がされます.
初期設定のロケールを確認する場合, デフォルトで提供されているlocale
コマンドを用います.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
% locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
Locale情報の格納場所
Locale設定はユーザー固有 or システム全体に応じて異なったファイルに保存されます.
~/.pam_environment
: ユーザー固有のロケール設定ファイル/etc/default/locale
: システム全体のロケール設定ファイル
locale
コマンドはユーザー固有の設定を優先して参照する形となっています.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
% cat /etc/default/locale
LANG=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_MONETARY=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
% cat ~/.pam_environment
LANGUAGE DEFAULT=en_US:en
LANG DEFAULT=en_US.UTF-8
LC_NUMERIC DEFAULT=en_US.UTF-8
LC_TIME DEFAULT=en_US.UTF-8
LC_MONETARY DEFAULT=en_US.UTF-8
LC_PAPER DEFAULT=en_US.UTF-8
LC_NAME DEFAULT=en_US.UTF-8
LC_ADDRESS DEFAULT=en_US.UTF-8
LC_TELEPHONE DEFAULT=en_US.UTF-8
LC_MEASUREMENT DEFAULT=en_US.UTF-8
LC_IDENTIFICATION DEFAULT=en_US.UTF-8
PAPERSIZE DEFAULT=letter
% locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
Localeの設定項目
Localeの設定は以下のフォーマットで指定します
1
Locale変数=languiage(_territory)(.encoding)(@modifier)
ロケールの構成項目は以下です:
項目 | 説明 |
---|---|
language |
言語の指定, 日本語の場合はjp |
territory |
国/値域の指定, 日本語の場合はJP |
encoding |
エンコーディングの指定 |
modifier |
通貨表記などの修飾子の指定 |
利用可能なロケール一覧はlocale -a
で表示できます. この表示結果は
1
2
3
4
5
6
7
8
% locale -a
C
C.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
...
のようにlowercased & removing special charactersで正規化されていますが,
en_US.utf8
はen_US.UTF-8
と同じ意味となります.
ロケール変数
ロケール変数 | 説明 |
---|---|
LANG |
LC_* variablesのデフォルト値 |
LANGUAGE |
GNU gettext の方式に対応したプログラムの言語のデフォルト設定値, : 区切りで複数設定可能 |
LC_ADDRESS |
アドレスフォーマット |
LC_COLLATE |
sort順番 |
LC_CTYPE |
文字の種類 |
LC_IDENTIFICATION |
メタデータのフォーマット |
LC_NUMERIC |
小数点などの数値表現のフォーマット |
LANG vs LANGUAGE
ロケール設定の基本は, 環境変数 LANG
で, 通常はLANG
さえ設定しておけばそのロケールに合った処理や表示が行われます.
一方, LANGUAGE
はGNU gettextを用いて翻訳を表示するプログラムに対して, 表示する翻訳の優先順位を指定します.
使い方としては, 第一言語が日本語, 第二言語がドイツ語のユーザーを想定したとき, 日本語のLANG=jp_JP.UTF-8
とすることで基本的には日本語表示されますが,
もし日本語翻訳が存在しなかった場合, 英語でメッセージが表示されてしまいます. このとき,
LANGUAGE=jp:de:en
と設定すると, 日本語を最初に参照し, なければドイツ語, なければ英語の優先順位で表示という動作になります.
Locale変数の優先順番
GNU gettext の方式に対応したプログラムがロケール環境変数を参照(look up)するとき, 環境変数を以下の順番で見に行きます
LANGUAGE
LC_ALL
LC_xxx
LANG
ロケール変数の変更
一時的に変更するだけならばcommand lineにて環境変数を変更するだけで事足ります.
1
2
3
4
5
6
7
$ date
Sat May 14 15:59:12 CEST 2011
$ LC_TIME=zh_CN.UTF-8
$ date
2011年 05月 14日 星期六 16:00:13 CEST 2011
permanentlyに変更する場合,
/etc/default/locale
,~/.pam_environment
をマニュアルで修正bash_profile
にexport
コマンドを用いいて修正update-locale
コマンドで修正
という方法が考えられます.
1
$ update-locale LANG=de_DE.UTF-8 LC_MESSAGES=POSIX
というようにupdate-locale
コマンドで修正は可能ですが, この修正は/etc/default/locale
に書かれてしまうので
サーバーで自分個人ユーザーの範囲内で修正する場合は~/.pam_environment
や.bash_profile
への記載にとどめたほうが良いと思います.
References
- Ubuntu Help Wiki > Locale
- gnu.org > Locale Environment Variables
- Ryo’s Tech Blog > 日本語のディレクトリ/アプリをEnglishにrenameする
(注意:GitHub Accountが必要となります)