kazmax - Linux で自宅サーバー

setlocale - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. 注意
  7. 関連項目

名前

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
時刻と日付けの書式

引き数 localecategory に設定する文字列へのポインタである。 この文字列はよく知られた定数である "C" や "da_DK" などでも良いし (以下を参照)、他のときに setlocale ()を呼び出した際に返された、内部用の文字列でも良い。

locale"" の場合、ロケールの各部分の設定には環境変数が参照される。 その詳細は実装依存である。 glibc の場合、まず最初に (どんな category に対しても) 環境変数 LC_ALL が検査される。 次にカテゴリ (category) と同じ名前の環境変数 (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) が検査され、最後に環境変数 LANG が検査される。 最初に見つかった環境変数を使用する。 その値がロケール指定として正しくなければ、ロケールは変更されず、 setlocale ()は NULL を返す。

"C" ロケールや "POSIX" ロケールは互換性のあるロケールである。 この LC_CTYPE の部分は 7 ビット ASCII 文字集合に相当している。

ロケール名の書式は、通常 language [_ territory ][. codeset ][@ modifier ]というものである。 ここで language は ISO 639 の言語コードである。 territory は ISO 3166 の国名コードである。 codeset"ISO-8859-1""UTF-8" のような文字集合や文字符号化識別子である。 サポートされているロケールの一覧を得るには、 "locale -a" を実行してみよ ( locale (1)参照のこと)。

locale が NULL ならば、現在のロケールを問い合わせるのみで変更はしない。

main プログラムの起動時には、 互換性のある "C" ロケールがデフォルトで選択される。 プログラムをすべてのロケールに対して互換にしたければ、 プログラムの初期化の後に setlocale(LC_ALL, "*") を呼び出し、ロケール依存の情報には localeconv ()の返り値を用い、 MB_CUR_MAX > 1 の場合には文字列の操作には多バイト文字、ワイド文字関数を使用し、 文字列の比較には strcoll (), wcscoll ()や strxfrm (), wcsxfrm ()を用いる。

返り値

setlocale ()の呼び出しに成功すると、 そのロケール集合に対応する内部文字列 (opaque string) を返す。 この文字列は静的な記憶域に割り当てられているかもしれない。 この返って来た文字列を、カテゴリ指定と共に、 のちの setlocale の呼び出しに指定すれば、 プロセスのその部分のロケールが復元される。 設定に失敗した場合には、返り値は NULL になる。

準拠

C99, POSIX.1-2001.

注意

Linux (というか GNU libc) は互換性のあるロケールとして "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 ()は正しい答えを返した。 最近では、英語以外を使うヨーロッパ人はもう少々やっかいな作業を必要とし、 実際のロケールファイルをインストールしなければならない。

関連項目

locale (1), localedef (1),  isalpha (3),   localeconv (3),   nl_langinfo (3),   rpmatch (3),   strcoll (3),   strftime (3),  charsets (4),  locale (7)