SETLOCALE(3)

名前
setlocale - 現在のロケール(locale)を設定する

書式
#include <locale.h>

char *setlocale(int category, const char * locale);

説明
setlocale() 関数はプログラムの現在のロケールを設定したり問い合わせたりするのに用い られる。 locale が "C" または "POSIX" ならば、現在のロケールは互換性のあるロケールに設定される。

locale が "" ならば、ロケールは環境変数 LANG で設定されたデフォルトのロケールに設定される。

main プログラムの最初では、互換性のある "C" ロケールがデフォルトとして設定される。

引数 category は新しいロケールの影響を受ける関数を決める:

LC_ALL
    全て

LC_COLLATE
    関数 strcoll() と strxfrm()

LC_CTYPE
    文字種別判定と文字変換を行うルーチン

LC_MONETARY
    localeconv()

LC_NUMERIC
    十進数字

LC_TIME
    strftime()

プログラムをすべてのロケールに対して互換的に動作させたければ、以下のよ うにすればよいだろう： 1)プログラムの初期化部の最後に setlocale(LC_ALL, "" ) を呼び出す、2)ロケール依存な情報には localeconv() の返り値を用いる、3)文字列の比較には strcoll() や strxfrm() を用いる。

返り値
setlocale() の呼び出しに成功するとロケール・セットに対応する文字列を返す。 この文字列は静的な記憶域に割り当てられるかもしれない。 この返って来た文字列を、カテゴリ指定と共に、のちの(setlocale の)呼び出 しに指定すれば、プロセスのその部分のロケールが復元される。 要求が受け入れられなかったときは NULL が返される。

準拠
ANSI C, POSIX.1

Linux (というか libc) は互換性のあるロケールとして "C" と "POSIX" をサポートしている。 古きよき日々には European Latin-1 として "ISO-8859-1" ロケール(例えば libc-4.5.21 と libc-4.6.27 にて)が、Russian として "KOI-8" (より正確には "koi-8r") ロケール(例えば libc-4.6.27 にて)がサポートさ れていた。なので 環境変数 LC_CTYPE=ISO-8859-1 と指定すると isprint() は正しい答えを返した。最近では英語以外を使うヨーロッパ人はもうちょっ と頑張る必要があって、見合ったロケールファイルをインストールしなけれ ばならない。

printf() 関数グループは現在のロケールを反映するかもしれないし、 しないかもしれない。

関連項目
locale(1), localedef(1), strcoll(3), isalpha(3), localeconv(3), strftime(3), locale(7)