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_ 开头后接至少一个大写字母,可能在 locale.h 中定义。例如,POSIX规范要求包含 LC_MESSAGES (该常量控制包括 perror strerror 在内的行为),ISO/IEC 30112:2014( 2014草案 )额外定义了 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> (页: TBD)
  • C17 标准 (ISO/IEC 9899:2018):
  • 7.11/3 本地化 <locale.h> (页: 待定)
  • C11标准(ISO/IEC 9899:2011):
  • 7.11/3 本地化 <locale.h> (页码:224)
  • C99标准(ISO/IEC 9899:1999):
  • 7.11/3 本地化 <locale.h>(页码:205)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 4.4 本地化 <locale.h>

参见

获取并设置当前C区域设置
(函数)
C++ 文档 关于 locale categories