char* setlocale(int category,
                const char *locale)
1.0、参考
1.1、此函数的作用

设置指定类别(category)的本地(locale)。

1.2、参数说明

int category表示本地的类别。可使用下列

libc说明
LC_ALLPOSIX代表所有类别
LC_CTYPEPOSIX定义系统的字符处理特性。哪些字符能被视为字母、数字,等等;与中文输入关系密切
LC_COLLATEPOSIX比较和排序习惯。会影响目录列表的排列顺序
LC_TIMEPOSIX日期和时间的格式
LC_NUMERICPOSIX定义非货币型数值的格式。影响到千位分隔符和小数分隔符等
LC_MONETARYPOSIX定义货币单位和货币型数值的格式
LC_MESSAGESPOSIX提示信息、错误信息、状态信息、标题、标签、按钮和菜单等
LC_NAMEglibc姓名书写格式
LC_TELEPHONEglibc电话号码书写方式
LC_ADDRESSglibc地址书写方式
LC_PAPERglibc定义默认的纸张尺寸
LC_MEASUREMENTglibc度量衡表达方式
LC_IDENTIFICATIONglibc对 locale 自身包含信息的概述

char *locale表示本地

char *locale的值可以是如下形式:

<ISO-639 Language Code>_<ISO-3166 Country/Region Code>[.<Charactor Coding>]

ISO-639 Language Codes

ISO-3166 Country/Region Codes

Charactor Coding

示例:

zh_CN
zh_CN.UTF-8
en_US
en_US.ISO8859-1

另外,有2个特殊的<ISO-639 Language Code>_<ISO-3166 Country/Region Code>CPOSIX

char *locale的取值可以通过locale -a命令获得。

1.3、返回值说明

若成功,则返回char *locale

若失败,则返回NULL

1.4、使用示例
#include <stdio.h>
#include <locale.h>

int main(int argc, char* argv[]) {
    if (1 == argc) {
        printf("请输入locale\n");
        return 1;
    }

    char *locale = setlocale(LC_ALL, argv[1]);
    if (NULL == locale) {
        printf("%s 设置失败\n", argv[1]);
    } else {
        printf("%s 设置成功\n", argv[1]);
    }

    return 0;
}

使用cc命令编译 ⤵︎

cc -o test_locale test.c

运行结果如下 ⤵︎

./test_locale zh_CN.UTF-8
zh_CN.UTF-8 设置成功

./test_locale zh_CN.UTF8
zh_CN.UTF8 设置失败