#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|技術|