SETLOCALE(3) — NEWS-OS Programmer’s Manual
名称
setlocale − locale 環境の設定
形式
#include <locale.h>
char ∗setlocale(category, locale)
int category;
char ∗locale;
解説
多国語対応されたプログラムは、 実行時に、メッセージの言語や文字コードなどのカテゴリを 適当な環境に設定しなければ、正しく動作しません。 この実行時の環境を「locale」と呼びます。
setlocale は、引数 category で指定されたカテゴリに 関する locale 環境を設定します。
カテゴリ名は <locale.h> で定義されていて、 次の意味を持っています。
LC_ALL
以下のすべてのカテゴリを同時に変更する時に用います。
LC_CTYPE
文字コードに関するカテゴリです。 文字の分類を行う ctype(3) マクロなどに影響します。
LC_NUMERIC
数値の表現に関するカテゴリです。例えば、小数点として 「.」の代わりに「,」を用いるなど。
LC_TIME
日付や時刻の表現に関するカテゴリです。
LC_COLLATE
文字列の順序に関するカテゴリです。
LC_MONETARY
金額の表現に関するカテゴリです。
LC_MESSAGES
メッセージに関するカテゴリです。
引数 locale は文字列で、 例えば setlocale(LC_CTYPE, locale) を実行するためには、 /usr/lib/locale/LC_CTYPE の下にその名前のファイルまたは ディレクトリが存在しなければなりません。
locale が "" (空文字列) の場合、 category に等しい環境変数の値を locale 名として使用します。 例えば、setlocale(LC_CTYPE, "") に対しては、 環境変数 LC_CTYPE の値です。 その環境変数が存在しない場合、 環境変数 LANG の値を使用します。 この環境変数も存在しない場合は、 $HOME/.userinfo に書かれた LC_CTYPE または LANG の値を使用します。 これも存在しない場合は、 /etc/sysinfo に書かれた LC_CTYPE または LANG の値を使用します。 これも存在しない場合は、 locale の値として "C" が用いられます。
setlocale は、実際に設定した locale の値の文字列を指すポインタを返します。 locale を設定できなかった時は、NULL ポインタを返します。 この場合、locale 環境は元のままで変更されません。
カテゴリが LC_ALL の場合、 locale を設定できないカテゴリがひとつでも存在すると、 すべての locale 環境が元のままで変更されず、 setlocale は NULL ポインタを返します。
locale が 0 (NULL ポインタ) の場合、 setlocale は、現在そのカテゴリに設定されている locale の値の 文字列を指すポインタを返します。 locale の変更は行われません。
setlocale を実行する前は、 "C" という locale がデフォルトとして設定されています。
関連ファイル
/usr/lib/locale/category/locale
/etc/sysinfo
$HOME/.userinfo
関連事項
注意事項
NEWS-OS 4.0 では、LC_CTYPE だけが、 ctype(3) マクロや mblen(3) など、いくつかのライブラリ関数に影響を与えます。他のカテゴリにつ いては、今後、対応する関数が順次用意される予定です。
NEWS-OS 3.x の set_syscode(3J) は、 setlocale を呼びだすように変更されました。 したがって、環境変数 SYS_CODE ではなく、 環境変数 LC_CTYPE または LANG の値を参照します。例えば、 set_syscode(0) は setlocale(LC_CTYPE, "") と同じ動作をします。ただし、 set_syscode が、<ctype.h> で定義されている _sys_code の値を返すことは変更さ れていません。この _sys_code は、 setlocale によって設定されます。
NEWS-OSRelease 4.2.1R