setlocale関数は、現在のロケール情報を設定、変更、または問い合わせを行います。
ロケールとは、国や言語に特有の情報のことで、設定・変更することで、プログラムの表示形式を地域性に合わせてカスタマイズできます。
なお、カスタマイズできる表示形式としては、日付の形式や通貨値の表示形式などがあります。
コンパイラがユニコード設定(配列に文字列を格納する場合、全ての文字について1文字1要素で格納できる)の場合、本関数を使用して、ロケール情報を設定しておかなければ、表示が正しくされない場合があります。
※マルチバイト設定(文字種によって格納要素数が異なる)の場合は不要です。
#include <locale.h>
char *setlocale( int category, const char *locale );
categoryは、プログラムのどのような処理部分のロケール情報を変更するのかを指定します。
指定できるのは以下になります。なお、影響を受ける処理によって、影響される関数が違いますので、併記します。
| LC_ALL | 以下の処理全てが影響範囲です | 以下の関数全てが影響範囲です |
|---|---|---|
| LC_COLLATE | 文字の照合や正規表現に関する処理 | strcoll、_stricoll、wcscoll、_wcsicoll、strxfrm、_strncoll、_strnicoll、_wcsncoll、_wcsnicoll、および wcsxfrm の各関数 |
| LC_CTYPE | 文字種変換に関する処理 | 文字処理関数 (isdigit、isxdigit、mbstowcs、mbtowc の各関数は除く) |
| LC_MONETARY | 通貨単位や金額の表記 | localeconv 関数から返される通貨形式の情報 |
| LC_NUMERIC | 数値の表記 | 書式付き出力ルーチン (printf など) とデータ変換ルーチンの小数点文字、および localeconv が返す非通貨形式の情報の小数点文字。
また、千単位の桁区切り記号と localeconv 関数が返すグループ化制御文字列も設定します |
| LC_TIME | 日付や時間の表記 | strftime、wcsftime |
なお、categoryが上記に該当しない場合、NULL ポインタを返し、プログラムの現在のロケール設定は変更しません。
localeは、ロケール名を指定する文字列へのポインタです。
ロケール名は、地域や言語を指定する名称のことで、ここで設定したロケール名に該当するロケール情報が設定されます。
なお、localeが nullポインタの場合、本関数は、ロケール設定せずに、現在のロケール情報を示す文字列のポインタを返します。
また、localeに” (長さ 0 の文字列) を指定した場合、現在の環境(OS)で設定されているロケール情報が設定されます。
設定可能なロケール名は、以下のようなものが定義されています(以下は例です)。
| 英語 (既定) | ‘english’ |
|---|---|
| 日本語 | ‘japanese’または’jpn’ |
| 米国 | ‘usa’、’america’、’united states’、’united-states’、または ‘us’ |
| ANSI規格に最低限準拠した環境 | ‘C’ |
戻り値として、
有効な引数を指定すると、指定されたロケールおよびカテゴリに関連付けられている文字列へのポインタを返します。
引数が無効な場合は NULLポインタを返し、プログラムの現在のロケール設定は変更しません。
プログラム 例
#include <stdio.h>
#include <locale.h>
int main(void)
{
char *loc;
/* ロケール情報を'jpn'(日本)に設定し、取得 */
loc = setlocale(LC_ALL, 'jpn');
printf('locale = %sn', loc);
printf('日本語n');
printf('Englishn');
printf('n');
/* ロケール情報を'us'(米国)に設定し、取得 */
loc = setlocale(LC_ALL, 'us');
printf('locale = %sn', loc);
printf('日本語n');
printf('Englishn');
printf('n');
return 0;
}
例の実行結果
> setlocale.exe
locale = Japanese_Japan.932
日本語
English
locale = English_United States.1252
“u?{?e
English
※Windows環境でのみ動作確認しております。LINUX環境などでは動作が異なる場合がありますので、その場合は環境に合わせてカスタマイズしてください。
Copyright © 2011 katsumi Handa All Rights Reserved.