LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME
|
定义于头文件
<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
|
|