Linux 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"のように設定する。
ロカール定義情報の確認 : 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="日曜日;月曜日;火曜日;水曜日;木曜日;金曜日;土曜日"
基本:
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の場合は以下の順序で環境変数を検査し、最初に見つかった値を使う。
ロカール名として不正であれば、setlocale()はNULLを返す。