C標準ライブラリ -<locale.h>

概要

<locale.h>locale.h は C 標準ライブラリ内のヘッダファイルであり、プログラムの国際化とローカライゼーションをサポートします。日付、時刻、通貨、数値形式などのプログラムのローカライズ情報を設定または照会するための一連の関数とマクロを提供します。

次に、いくつかのマクロと、重要な構造体を紹介します。struct lconvおよび2つの重要な関数について説明します。

ライブラリマクロ

以下に、ヘッダファイル locale.h で定義されているマクロを示します。これらのマクロは、次の2つの関数で使用されます:

番号マクロ & 説明
1 LC_ALL
すべてのローカライズカテゴリを設定または照会するために使用されます。
2 LC_COLLATE
文字列比較のローカライズ情報を設定または照会するために使用されます。
3 LC_CTYPE
文字処理のローカライズ情報を設定または照会するために使用されます。
4 LC_MONETARY
通貨形式のローカライズ情報を設定または照会するために使用されます。
5 LC_NUMERIC
数値形式のローカライズ情報(例:小数点の記号)を設定または照会するために使用されます。
6 LC_TIME
時刻形式のローカライズ情報を設定または照会するために使用されます。
7 locale_t
ロケール情報の型を表します。

ライブラリ関数

以下に、ヘッダファイル locale.h で定義されている関数を示します:

番号関数 & 説明
1char *setlocale(int category, const char *locale)
ロケール情報を設定または読み取ります。
2struct lconv *localeconv(void)
ロケール情報を設定または読み取ります。
3locale_t newlocale(int category_mask, const char *locale, locale_t base)
新しいローカライズオブジェクトを作成します。
4freelocale(locale_t locale)
ローカライズオブジェクトを解放します。
5locale_t uselocale(locale_t newloc)
スレッドのローカライズオブジェクトを設定または照会します。

例

ローカライズ情報の設定と照会:

例

#include <stdio.h>
#include <locale.h>

int main() {
    // ローカライズ情報をユーザー環境変数のデフォルト設定に設定します
    setlocale(LC_ALL, "");

    // 現在のローカライズ情報を取得して出力します
    printf("Current locale for LC_ALL: %s\n", setlocale(LC_ALL, NULL));
    printf("Current locale for LC_TIME: %s\n", setlocale(LC_TIME, NULL));
    printf("Current locale for LC_NUMERIC: %s\n", setlocale(LC_NUMERIC, NULL));

    return 0;
}

コンパイル出力結果は次のとおりです:

Current locale for LC_ALL: zh_CN.UTF-8
Current locale for LC_TIME: zh_CN.UTF-8
Current locale for LC_NUMERIC: zh_CN.UTF-8

数値および通貨形式の情報を取得:

例

#include <stdio.h>
#include <locale.h>

int main() {
    // ローカライズ情報をユーザー環境変数のデフォルト設定に設定します
    setlocale(LC_ALL, "");

    // ローカライズされた数値および通貨形式の情報を取得します
    struct lconv *lc = localeconv();

    // 数値および通貨形式の情報を出力します
    printf("Decimal point character: %s\n", lc->decimal_point);
    printf("Thousands separator: %s\n", lc->thousands_sep);
    printf("Currency symbol: %s\n", lc->currency_symbol);

    return 0;
}

コンパイル出力結果は次のとおりです:

Decimal point character: .
Thousands separator: ,
Currency symbol: ¥

カスタムローカライズオブジェクトの使用:

例

#include <stdio.h>
#include <locale.h>
#include <xlocale.h>

int main() {
    // "en_US.UTF-8" ロケールを使用して、新しいローカライズオブジェクトを作成します
    locale_t newloc = newlocale(LC_ALL_MASK, "en_US.UTF-8", (locale_t)0);

    // 現在のスレッドのローカライズオブジェクトを新しいローカライズオブジェクトに設定します
    locale_t oldloc = uselocale(newloc);

    // 現在のスレッドのローカライズ情報を取得して出力します
    printf("Current locale for LC_NUMERIC: %s\n", setlocale(LC_NUMERIC, NULL));

    // 新しいローカライズオブジェクトを解放します
    uselocale(oldloc);
    freelocale(newloc);

    return 0;
}

コンパイル出力結果は次のとおりです:

Current locale for LC_NUMERIC: C

ライブラリ構造体

typedef struct {
   char *decimal_point;
   char *thousands_sep;
   char *grouping;    
   char *int_curr_symbol;
   char *currency_symbol;
   char *mon_decimal_point;
   char *mon_thousands_sep;
   char *mon_grouping;
   char *positive_sign;
   char *negative_sign;
   char int_frac_digits;
   char frac_digits;
   char p_cs_precedes;
   char p_sep_by_space;
   char n_cs_precedes;
   char n_sep_by_space;
   char p_sign_posn;
   char n_sign_posn;
} lconv

以下は各フィールドの説明です:

番号フィールド & 説明
1 decimal_point
非通貨値に使用される小数点文字。
2 thousands_sep
非通貨値に使用される桁区切り文字。
3 grouping
非通貨量における各桁グループのサイズを表す文字列。各文字は整数値を表し、各整数は現在のグループの桁数を指定します。値が 0 の場合は、前の値が残りのグループに適用されることを意味します。
4 int_curr_symbol
国際通貨記号に使用される文字列。最初の3文字は ISO 4217:1987 によって指定され、4番目の文字は通貨記号と通貨量を区切るために使用されます。
5 currency_symbol
通貨に使用されるローカル記号。
6 mon_decimal_point
通貨値に使用される小数点文字。
7 mon_thousands_sep
通貨値に使用される桁区切り文字。
8 mon_grouping
通貨値における各桁グループのサイズを表す文字列。各文字は整数値を表し、各整数は現在のグループの桁数を指定します。値が 0 の場合は、前の値が残りのグループに適用されることを意味します。
9 positive_sign
正の通貨値に使用される文字。
10 negative_sign
負の通貨値に使用される文字。
11 int_frac_digits
国際通貨値で小数点以下に表示する桁数。
12 frac_digits
通貨値で小数点以下に表示する桁数。
13 p_cs_precedes
1 に等しい場合、currency_symbol は正の通貨値の前に表示されます。0 に等しい場合、currency_symbol は正の通貨値の後に表示されます。
14 p_sep_by_space
1 に等しい場合、currency_symbol と正の通貨値の間はスペースで区切られます。0 に等しい場合、currency_symbol と正の通貨値の間はスペースで区切られません。
15 n_cs_precedes
1 に等しい場合、currency_symbol は負の通貨値の前に表示されます。0 に等しい場合、currency_symbol は負の通貨値の後に表示されます。
16 n_sep_by_space
1 に等しい場合、currency_symbol と負の通貨値の間はスペースで区切られます。0 に等しい場合、currency_symbol と負の通貨値の間はスペースで区切られません。
17 p_sign_posn
正の通貨値における正号の位置を表します。
18 n_sign_posn
負の通貨値における負号の位置を表します。

以下の値は次の用途に使用されますp_sign_posnとn_sign_posn:

值説明
0 値と currency_symbol を囲む括弧。
1 値と currency_symbol の前に配置される記号。
2 値と currency_symbol の後に配置される記号。
3 値と currency_symbol の直前に配置される記号。
4 値と currency_symbol の直後に配置される記号。
その他の拡張