#include <locale.h> char *setlocale(int category, const char * locale);
如果 locale 不是 NULL, 程序 就会 根据 参数 更改 相应的 区域选项. category 参数 指定 区域选项 的 哪一部分 需要 更改.
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) 可以 获得 一个 系统 支持的 区域选项 的 列表.
如果 locale 是 NULL, 意味着 只是 查询 当前 的 区域选项 而不 更改它.
当 main 程序 开始的 时候 可移植的 C 区域选项 作为 默认值 被设置. 一个 程序 可以 在 初始化 之后 调用 setlocale(LC_ALL, ) 函数, 并且 从 localeconv() 调用 的 返回 中 获得 和 区域选项 相关的 信息, 如果 MB_CUR_MAX > 1 就用 多字节 和 宽字节 函数 来 处理 文本, 用 strcoll(), wcscoll() 或者 strxfrm(), wcsxfrm() 来 比较 字符串, 这样 就可以 使 程序 有 较好的 移植性.