#locale.h
導入
locale.h
はプログラムのローカライズ設定であり、主に以下の動作に影響します。
- 数値形式
- 通貨形式
- 文字セット
- 日付と時刻の形式
以下のマクロを設定します。
- LC_COLLATE: 文字列比較関数
strcoll()
およびstrxfrm()
に影響します。 - LC_CTYPE: 文字処理関数の動作に影響します。
- LC_MONETARY: 通貨形式に影響します。
- LC_NUMERIC:
printf()
の数値形式に影響します。 - LC_TIME: 時間形式
strftime()
およびwcsftime()
に影響します。 - LC_ALL: 上記のすべてのカテゴリを指定されたロケールに設定します。
setlocale()
setlocale()
は現在のロケールを設定するために使用されます。
char* setlocale(int カテゴリ, const char* ロケール);
2 つのパラメータを受け入れます。最初のパラメータは影響範囲を示します。値がカテゴリを示す最初の 5 つのマクロのいずれかである場合、そのマクロに対応するカテゴリにのみ影響します。値が LC_ALL' の場合は、すべてのカテゴリに影響します。 2 番目のパラメータは通常、単に
"C"(通常モード) または
""` (ネイティブ モード) です。
プログラムが開始されると、次の呼び出しが暗黙的に行われます。
setlocale(LC_ALL, "C");
次のステートメントは形式をローカライズします。
setlocale(LC_ALL, "");
上記の例では、2 番目のパラメーターは null 文字で、現在の環境によって提供されるローカリゼーション設定が使用されることを示します。
理論的には、2 番目のパラメータを現在のシステムでサポートされている形式に設定することもできます。
setlocale(LC_ALL, "en_US.UTF-8");
ただしこの場合、他のシステムがその形式をサポートするという保証がないため、プログラムの移植性は悪化します。したがって、2 番目のパラメータを空の文字列に設定し、オペレーティング システムの現在の設定を使用するのが一般的です。
setlocale()
の戻り値は文字列ポインタで、設定された形式を示します。呼び出しが失敗した場合は、ヌル ポインタ NULL が返されます。
setlocale()
を使用して現在の領域をクエリできます。この場合、2 番目のパラメータを NULL に設定できます。
char *loc;
loc = setlocale(LC_ALL, NULL);
// 出力開始ロケール: C
printf("開始ロケール: %s\n", loc);
loc = setlocale(LC_ALL, "");
// 出力ネイティブ ロケール: en_US.UTF-8
printf("ネイティブ ロケール: %s\n", loc);
localeconv()
現在のフォーマットの詳細情報を取得するには、localeconv()
を使用します。
struct lconv* localeconv(void);
この関数は、形式情報を含む Struct 構造体ポインターを返します。その主なプロパティは次のとおりです。
- char* mon_decmal_point:
.
などの通貨の小数点文字。 - char* mon_thousands_sep: 通貨の千単位の区切り文字 (「,」など)。
- char* mon_grouping: 通貨グループ化記述子。
- char*positive_sign: 通貨の正符号 (「+」または空の文字列など)。
- char* negative_sign: 通貨の負の符号 (「-」など)。
- char*currency_symbol:
$
などの通貨記号。 - char frac_digits: 通貨金額を出力するときに、小数点以下の小数点以下の桁数を出力します。たとえば、「2」に設定します。
- char p_cs_precedes:
1
に設定すると、通貨記号currency_symbol
が負でない金額の前に表示されます。0
に設定すると、後に が表示されます。 - char n_cs_precedes:
1
に設定すると、通貨記号currency_symbol
が負の通貨金額の前に表示されます。0
に設定すると、後に が表示されます。 - char p_sep_by_space: 負でない通貨金額と通貨記号の間の区切り文字を決定します。
- char n_sep_by_space: 負の通貨金額と通貨記号の間の区切り文字を決定します。
- char p_sign_posn: 非負値の正符号の位置を決定します。
- char n_sign_posn: 負の値の負符号の位置を決定します。
- char* int_curr_symbol:
USD
などの通貨の国際記号。 - char int_frac_digits: 国際記号を使用する場合の
frac_digits
の値。 - char int_p_cs_precedes: 国際記号を使用する場合の
p_cs_precedes
の値。 - char int_n_cs_precedes: 国際記号を使用する場合の
n_cs_precedes
の値。 - char int_p_sep_by_space: 国際記号を使用する場合の
p_sep_by_space
の値。 - char int_n_sep_by_space: 国際記号を使用する場合の
n_sep_by_space
の値。 - char int_p_sign_posn: 国際記号を使用する場合の
p_sign_posn
の値。 - char int_n_sign_posn: 国際記号を使用する場合の
n_sign_posn
の値。
次のプログラムは、現在のシステムのプロパティ値を出力します。
#include <stdio.h>
#include <ロケール.h>
#include <文字列.h>
int main()
{
setlocale (LC_ALL,"zh_CN");
構造体 lconv * lc;
lc=localeconv();
printf ("小数点: %s\n",lc->小数点);
printf ("千sep: %s\n",lc->千sep);
printf ("グループ化: %s\n",lc->グループ化);
printf ("int_curr_symbol: %s\n",lc->int_curr_symbol);
printf ("通貨記号: %s\n",lc->通貨記号);
printf ("mon_decmal_point: %s\n",lc->mon_decmal_point);
printf ("mon_thousands_sep: %s\n",lc->mon_thousands_sep);
printf ("mon_grouping: %s\n",lc->mon_grouping);
printf ("positive_sign: %s\n",lc->positive_sign);
printf ("negative_sign: %s\n",lc->negative_sign);
printf ("frac_digits: %d\n",lc->frac_digits);
printf ("p_cs_precedes: %d\n",lc->p_cs_precedes);
printf ("n_cs_precedes: %d\n",lc->n_cs_precedes);
printf ("p_sep_by_space: %d\n",lc->p_sep_by_space);
printf ("n_sep_by_space: %d\n",lc->n_sep_by_space);
printf ("p_sign_posn: %d\n",lc->p_sign_posn);
printf ("n_sign_posn: %d\n",lc->n_sign_posn);
printf ("int_frac_digits: %d\n",lc->int_frac_digits);
printf ("int_p_cs_precedes: %d\n",lc->int_p_cs_precedes);
printf ("int_n_cs_precedes: %d\n",lc->int_n_cs_precedes);
printf ("int_p_sep_by_space: %d\n",lc->int_p_sep_by_space);
printf ("int_n_sep_by_space: %d\n",lc->int_n_sep_by_space);
printf ("int_p_sign_posn: %d\n",lc->int_p_sign_posn);
printf ("int_n_sign_posn: %d\n",lc->int_n_sign_posn);
0を返します。
}
作者: wangdoc
アドレス: https://wangdoc.com/
ライセンス: クリエイティブ・コモンズ 3.0