SETLOCALE(3) Linux Programmer's Manual SETLOCALE(3)
setlocale - 現在のロケール (locale) を設定する
#include <locale.h>
char *setlocale(int category, const char *locale);
setlocale() 関数はプログラムのカレントロケールを設定したり
問い合わせたりするのに用いられる。
locale が NULL でなければ、プログラムのカレントロケールは引-
数に従って変更される。 引た category
はプログラムのカレントロケールのどの部分を変更するかを決める。
LC_ALL 全てのロケール
LC_COLLATE
正規表現のマッチング
(範囲表現と等価クラスのマッチングを決定する) と文字列の照合
(collation)
LC_CTYPE
正規表現のマッチング、文字の分類、文字の変換、大文字小文字比較、
ワイド文字関数
LC_MESSAGES
地域化可能な自然言語メッセージ
LC_MONETARY
通貨の書式
LC_NUMERIC
数値の書式 (小数点や 3 桁ごとの区切り)
LC_TIME
時刻と日付けの書式
引た locale は category に設定する文字列へのポインタである。
この文字列はよく知られた定数である "C" や "da_DK" などでも良いし
(以下を参照)、他のとい setlocale()
を呼び出した際に返された、内部用の文字列でも良い。
locale が "" の場合、ロケールの各部分の設定には環曲竸瑤参照される。
その詳細は実装依存である。 glibc の場合、まず最初に (どんな category
に対しても) 環曲竸 LC_ALL が検査される。 次にカテゴリ (category)
と同じ名前の環曲竸 (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY,
LC_NUMERIC, LC_TIME) が検査され、最後に環曲竸 LANG が検査される。
最初に見つかった環曲竸瑤鮖藩僂垢襦
その値がロケール指定として正しくなければ、ロケールは変更されず、 setlo-
cale() は NULL を返す。
"C" ロケールや "POSIX" ロケールは互換世里△襯蹈院璽襪任△襦 この
LC_CTYPE の部分は 7 ビット ASCII 文字集合に相当している。
ロケール名の書式は、通常 language[_territory][.codeset][@modifier]
というものである。 ここで language は ISO 639 の言語コードである。 ter-
ritory は ISO 3166 の国名コードである。 codeset は ISO-8859-1 や UTF-8
のような文字集合や文字符号化識別子である。
サポートされているロケールの一覧を得るには、 "locale -a" を実行してみよ
(locale(1) 参照のこと)。
locale が NULL ならば、現在のロケールを問い合わせるのみで変更はしない。
main プログラムの起動時には、 互換世里△ "C"
ロケールがデフォルトで選択される。
プログラムをすべてのロケールに対して互換にしたければ、
プログラムの初期化の後に
setlocale(LC_ALL, "");
を呼び出し、ロケール依存の情報には localeconv(3) の返り値を用い、
MB_CUR_MAX > 1
の場合には文字列の操作には多バイト文字、ワイド文字関数を使用し、
文字列の比較には strcoll(3), wcscoll(3) や strxfrm(3), wcsxfrm(3)
を用いる。
setlocale() の呼び出しに成功すると、
そのロケール集合に対応する内部文字列 (opaque string) を返す。
この文字列は静的な飢碓茲乏笋蠹てられているかもしれない。
この返って来た文字列を、カテゴリ指定と共に、 のちの setlocale
の呼び出しに指定すれば、 プロセスのその部分のロケールが復元される。
設定に失敗した場合には、返り値は NULL になる。
C89, C99, POSIX.1-2001.
Linux (というか glibc) は互換世里△襯蹈院璽襪箸靴 "C" と "POSIX"
をサポートしている。 古い茲時代には (例えば libc-4.5.21 と libc-4.6.27
などでは)、 European Latin-1 向けに "ISO-8859-1"
ロケールがサポートされており、 ロシア語 (Russian) 向けに "KOI-8"
(より正確には "koi-8r") ロケールがサポートされていた。 従って環曲竸瑤
LC_CTYPE=ISO-8859-1 と指定するだけで isprint(3) は正しい答えを返した。
最近では、英語以外を使うヨーロッパ人はもう少々やっかいな作業を必要とし、
実際のロケールファイルをインストールしなければならない。
locale(1), localedef(1), isalpha(3), localeconv(3), nl_langinfo(3),
rpmatch(3), strcoll(3), strftime(3), charsets(7), locale(7)
GNU 1999-07-04 SETLOCALE(3)