Namespaces
Variants

LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME

From cppreference.net
定義先ヘッダ <locale.h>
#define LC_ALL      /* implementation-defined */
#define LC_COLLATE  /* implementation-defined */
#define LC_CTYPE    /* implementation-defined */
#define LC_MONETARY /* implementation-defined */
#define LC_NUMERIC  /* implementation-defined */
#define LC_TIME     /* implementation-defined */

上記の各マクロ定数は、整数定数式に展開され、それぞれが異なる値を持ち、 setlocale の第一引数として使用するのに適しています。

定数 説明
LC_ALL Cロケール全体を選択する
LC_COLLATE Cロケールの照合カテゴリを選択する
LC_CTYPE Cロケールの文字分類カテゴリを選択する
LC_MONETARY Cロケールの通貨書式カテゴリを選択する
LC_NUMERIC Cロケールの数値書式カテゴリを選択する
LC_TIME Cロケールの時間書式カテゴリを選択する

追加のマクロ定数で、名前が LC_ で始まり、その後少なくとも1つの大文字が続くものは、 locale.h で定義される可能性があります。例えば、POSIX仕様では LC_MESSAGES (これは特に perror strerror を制御します)が要求されています。ISO/IEC 30112:2014( 2014 draft )はさらに LC_IDENTIFICATION LC_XLITERATE LC_NAME LC_ADDRESS LC_TELEPHONE LC_PAPER LC_MEASUREMENT LC_KEYBOARD を定義しており、これらはGNU Cライブラリでサポートされています( LC_XLITERATE を除く)。

#include <locale.h>
#include <stdio.h>
#include <time.h>
#include <wchar.h>
int main(void)
{
    setlocale(LC_ALL, "en_US.UTF-8"); // CロケールはUTF-8対応の英語になります
    setlocale(LC_NUMERIC, "de_DE.utf8"); // 小数点はドイツ式になります
    setlocale(LC_TIME, "ja_JP.utf8");    // 日付/時刻の書式は日本語になります
    wchar_t str[100];
    time_t t = time(NULL);
    wcsftime(str, 100, L"%A %c", localtime(&t));
    wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, str);
}

出力例:

Number: 3,14
Date: 金曜日 2023年09月15日 20時04分14秒

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.11/3 ローカライゼーション <locale.h> (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.11/3 ローカライゼーション <locale.h> (p: TBD)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.11/3 ローカライゼーション <locale.h> (p: 224)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.11/3 ローカライゼーション <locale.h> (p: 205)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.4 ローカライゼーション <locale.h>

関連項目

現在のCロケールを取得および設定する
(関数)
C++ documentation for locale categories