国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > locale.h 以获得更好的体验。

# C 语言标准库头文件 locale.h

请查看 C 语言标准库头文件列表 了解更多相关 API。

这个头文件提供 本地化 的相关功能,例如设置数字和货币的格式。

设置语言环境需要操作系统支持,通常需要安装语言包。

例如:

sudo apt install language-pack-zh-hans  # 安装中文语言包

# 类型

类型 标准 说明
lconv C89 格式化详细信息

#

标准 说明
NULL C89 空指针常量
本地化类别宏 标准 说明
LC_ALL C89 整个 C 语言环境
LC_COLLATE C89 排序规则类别
LC_CTYPE C89 字符分类类别
LC_MONETARY C89 货币格式化类别
LC_NUMERIC C89 数值格式化类别
LC_TIME C89 时间格式化类别
  • 可以自定义额外的选项

# 函数

本地化类别宏 标准 说明
setlocale C89 获取和设置区域
localeconv C89 获取当前的格式化详细信息

# 推荐阅读

# 示例

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

int main(void) {
    // 1. 获取当前 locale
    char *old_locale = setlocale(LC_ALL, NULL);
    printf("当前locale: %s\n", old_locale);
    
    // 2. 设置为 zh_CN.UTF-8
    char *new_locale = setlocale(LC_ALL, "zh_CN.UTF-8");
    if (new_locale == NULL) {
        printf("无法设置locale\n");
        return 1;
    }
    printf("新locale: %s\n", new_locale);
    
    // 3. 演示数字格式
    printf("\n数字格式示例:\n");
    printf("本地格式: %'d\n", 123456789);
    printf("默认格式: %d\n", 123456789);
    
    // 4. 演示货币格式
    struct lconv *lc = localeconv();
    printf("\n货币格式示例:\n");
    printf("本地货币符号: %s\n", lc->currency_symbol);
    printf("正数货币格式: %s%.2f\n", lc->currency_symbol, 1234.56);
    
    // 5. 演示时间格式
    time_t t = time(NULL);
    struct tm *lt = localtime(&t);
    char time_str[100];
    
    strftime(time_str, sizeof(time_str), "%c", lt);
    printf("\n本地时间格式: %s\n", time_str);
    
    strftime(time_str, sizeof(time_str), "%x", lt);
    printf("本地日期格式: %s\n", time_str);
    
    strftime(time_str, sizeof(time_str), "%X", lt);
    printf("本地时间格式: %s\n", time_str);
    
    // 6. 恢复原始locale
    setlocale(LC_ALL, old_locale);
    
    return 0;
}

运行结果:

当前locale: C
新locale: zh_CN.UTF-8

数字格式示例:
本地格式: 123,456,789
默认格式: 123456789

货币格式示例:
本地货币符号: ¥
正数货币格式: ¥1234.56

本地时间格式: 2025年07月29日 星期二 19时10分33秒
本地日期格式: 2025年07月29日
本地时间格式: 19时10分33秒
本文 更新于: 2025-11-27 09:38:06 创建于: 2025-11-27 09:38:06