#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