Manpages

NAME

setlocale - 设 置 当 前 的 区 域 选 项

总 览 (SYNOPSIS)

#include <locale.h>

char *setlocale(int category, const char * locale);

描 述 (DESCRIPTION)

setlocale() 函 数 用 来 设 置 或 者 查 询 程 序 当 前 的 区 域 选 项 . 如 果 locale 不 是 NULL, 程 序 就 会 根 据 参 数 更 改 相 应 的 区 域 选 项 . category 参 数 指 定 区 域 选 项 的 哪 一 部 分 需 要 更 改 .

LC_ALL 代 表 所 有 部 分

.

LC_COLLATE 代 表 正 则 表 达 式 匹 配 (和 范 围 表 达 式 [range expressions] 以 及 字 符 类 [classes] 有 关 系 ) 和 字 符 串 排 序 .
LC_CTYPE
代 表 正 则 表 达 式 匹 配 , 字 符 类 (character classification), 转 换 , 区 分 大 小 写 的 比 较 , 以 及 宽 字 符 函 数 .
LC_MESSAGES
代 表 可 以 本 地 化 的 消 息 (自 然 语 言 ).
LC_MONETARY
代 表 货 币 格 式 .
LC_NUMERIC
代 表 数 字 格 式 (比 如 小 数 点 和 千 位 分 组 符 ).
LC_TIME
代 表 时 间 和 日 期 格 式 .

locale 参 数 是 一 个 指 向 字 符 串 的 指 针 . 此 字 符 串 为 category 需 要 的 设 置 . 此 字 符 串 可 以 是 一 个 众 所 周 知 的 区 域 选 项 常 量 , 如 "C" 或 "da_DK" (见 下 ), 也 可 以 是 另 外 一 个 setlocale 调 用 返 回 的 字 符 串 . 如 果 locale"", 需 要 更 改 的 部 分 会 根 据 环 境 变 量 做 相 应 的 设 置 . 具 体 的 和 实 现 有 关 . 对 于 glibc 来 说 , 首 先 查 看 环 境 变 量 LC_ALL (不 管 category),然 后 查 看 category (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) 同 名 的 环 境 变 量 , 最 后 查 看 环 境 变 量 LANG. 以 先 查 到 的 环 境 变 量 为 准 . 如 果 其 值 不 是 一 个 有 效 的 区 域 选 项 , 区 域 选 项 将 不 会 改 变 , setlocale 会 返 回 NULL. 标 准 区 域 选 项 "C""POSIX" 是 可 移 植 的 ; 它 的 LC_CTYPE 部 分 对 应 的 是 7 位 的 ASCII 字 符 集 . 一 个 典 型 的 区 域 选 项 有 如 下 的 格 式 : language[_territory][.codeset][@modifier], 其 中 language 是 一 个 ISO 639 语 言 代 码 , territory 是 一 个 ISO 3166 国 家 代 码 , codeset 是 一 个 象 ISO-8859-1 或 者 UTF-8 的 字 符 集 或 者 编 码 标 识 符 . 用 "locale -a", cf. locale(1) 可 以 获 得 一 个 系 统 支 持 的 区 域 选 项 的 列 表 . 如 果 localeNULL, 意 味 着 只 是 查 询 当 前 的 区 域 选 项 而 不 更 改 它 . 当 main 程 序 开 始 的 时 候 可 移 植 的 "C" 区 域 选 项 作 为 默 认 值 被 设 置 . 一 个 程 序 可 以 在 初 始 化 之 后 调 用 setlocale(LC_ALL, "" ) 函 数 , 并 且 从 localeconv() 调 用 的 返 回 中 获 得 和 区 域 选 项 相 关 的 信 息 , 如 果 MB_CUR_MAX > 1 就 用 多 字 节 和 宽 字 节 函 数 来 处 理 文 本 , 用 strcoll(), wcscoll() 或 者 strxfrm(), wcsxfrm() 来 比 较 字 符 串 , 这 样 就 可 以 使 程 序 有 较 好 的 移 植 性 .

返 回 值 (RETURN VALUE)

一 个 成 功 的 setlocale() 调 用 会 返 回 一 个 表 示 当 前 区 域 选 项 的 字 符 串 (指 针 ). 这 个 字 符 串 可 能 是 在 静 态 存 储 区 中 分 配 的 . 之 后 用 相 应 的 category 和 这 个 字 符 串 作 为 参 数 再 去 调 用 这 个 函 数 会 重 新 把 程 序 区 域 选 项 的 相 应 部 分 恢 复 . 如 果 请 求 不 能 完 成 将 会 返 回 NULL .

遵 循 (CONFORMING TO)

ANSI C, POSIX.1

注 意 (NOTES)

Linux (也 就 是 , GNU libc) 支 持 可 移 植 的 "C""POSIX" 区 域 选 项 . 在 以 前 它 曾 经 支 持 欧 洲 Latin-1 区 域 选 项 "ISO-8859-1" (比 如 说 在 libc-4.5.21 和 libc-4.6.27 中 ), 和 俄 罗 斯 的 "KOI-8" (更 准 确 点 是 , "koi-8r") 区 域 选 项 (比 如 在 libc-4.6.27 中 ), 所 以 设 置 一 个 环 境 变 量 LC_CTYPE=ISO-8859-1 就 能 够 让 isprint() 返 回 正 确 的 结 果 . 现 在 不 讲 英 语 的 欧 洲 人 会 比 以 前 更 麻 烦 一 些 , 他 们 需 要 安 装 相 应 的 区 域 选 项 文 件 .

参 见 (SEE ALSO)

locale(1), localedef(1), strcoll(3), isalpha(3), localeconv(3), strftime(3), charsets(4), locale(7)

[中 文 版 维 护 人 ]

唐 友 <tony_ty [AT] 263.net>

[中 文 版 最 新 更 新 ]

2001/12/2

[中 国 Linux论 坛 man手 册 页 翻 译 计 划 ]

http://cmpp.linuxforum.net

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh