#navi_header|技術|
Linux locale の自分用メモ
出典:
- &amazon() {Inside Linux Software オープンソースソフトウェアのからくりとしくみ
}
- CentOS 5.2 manページ : locale(1), locale(7), setlocale(3)
* locale名(ロカール名), カテゴリ
ロカール名の構造:
language[_territory][.codeset][@modifier]
| language | 言語名 : ISO 639 で定義された言語コードの小文字(2文字) |
| territory | 国家名 or 地域名 : ISO 3166 で定義された国/地域コード大文字2文字 |
| codeset | IANA定義の文字コード名 |
| modifier | 任意の修飾子 |
※プログラムの起動時は常に"C"or"POSIX"ロカールとなっている。変更するにはsetlocale(3)を呼ぶ必要がある。"POSIX"ロカールは"C"ロカールと同じで、基本的に英語のみ使用可能なロカールである。
なお省略や別名定義が行われている場合もあり、"ja_JP.UTF-8"なら"ja_JP", "ja.UTF-8", "ja", さらには"japanese"ロカールが準備されている場合もある。
カテゴリ:通常は環境変数として、"LC_XXYY=ja_JP.UTF-8"のように設定する。
: LC_CTYPE : 文字の分類/比較/変換の方法、および文字の解釈と表現の方法。
正規表現のマッチング、文字の分類、文字の変換、大文字小文字比較、ワイド文字関数に影響する。
: LC_COLLATE : 文字の照合方法や整列方法の規定。文字の大小関係や、合字の取り扱いを規定する。
正規表現のマッチング (範囲表現と等価クラスのマッチングを決定する) と文字列の照合 (collation) に影響する。
: LC_MESSAGES : メッセージの表示に利用する言語。地域化可能な自然言語メッセージを規定する。
: LC_MONETARY : 通貨の書式を規定する。小数点の区切りやカンマの位置, 通貨記号など。
: LC_NUMERIC : 数値の書式(小数点や 3 桁ごとの区切り)
: LC_TIME : 時刻と日付けの書式(strftime(3)に影響)
: LC_ALL : 上記の全て。
ロカール定義情報の確認 : localeコマンドで確認できる。
$ locale -a # 現在システムにインストールされているロカールの一覧
C
POSIX
aa_DJ
aa_DJ.iso88591
...
$ locale -m # 利用可能な文字コードの一覧
ANSI_X3.110-1983
ANSI_X3.4-1968
...
# 幾つかのキーを指定して取得
$ LC_ALL=zh_CN.UTF8 locale -k yesexpr day
yesexpr="^[yY是]"
day="星期日;星期一;星期二;星期三;星期四;星期五;星期六"
$ LC_ALL=en_US locale -k yesexpr day
yesexpr="^[yY].*"
day="Sunday;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday"
$ LC_ALL=ja_JP.UTF8 locale -k yesexpr day
yesexpr="^([yYyY]|はい|ハイ)"
day="日曜日;月曜日;火曜日;水曜日;木曜日;金曜日;土曜日"
* setlocale()の使い方メモ
基本:
char *setlocale(int category, const char *locale);
全てのカテゴリで"ja_JP.UTF-8"を設定:
setlocale(LC_ALL, "ja_JP.UTF-8");
ロカール名は環境変数から取得:
setlocale(LC_ALL, "");
現在のロカール名を取得:
char *current = NULL;
current = setlocale(LC_CTYPE, NULL);
ロカール名を環境変数から取得する場合、具体的にどの環境変数を検査するのかは実装依存となる。
glibcの場合は以下の順序で環境変数を検査し、最初に見つかった値を使う。
+ LC_ALL環境変数
+ LC_TIME, LC_NUMERICなど指定されたcategoryと同じ名前
+ LANG環境変数
ロカール名として不正であれば、setlocale()はNULLを返す。
#navi_footer|技術|