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)
可以 获得 一个 系统
支持的 区域选项 的
列表.
如果
locale 是
NULL, 意味着
只是 查询 当前 的
区域选项 而不 更改它.
当 main 程序 开始的 时候
可移植的
"C"
区域选项 作为 默认值
被设置. 一个 程序 可以
在 初始化 之后 调用
setlocale(LC_ALL, "" ) 函数, 并且
从
localeconv() 调用 的 返回
中 获得 和 区域选项
相关的 信息, 如果
MB_CUR_MAX >
1 就用 多字节 和
宽字节 函数 来 处理
文本, 用
strcoll(),
wcscoll() 或者
strxfrm(),
wcsxfrm() 来 比较
字符串, 这样 就可以 使
程序 有 较好的 移植性.
返回值 (RETURN VALUE)¶
一个 成功的
setlocale() 调用
会 返回 一个 表示 当前
区域选项 的 字符串
(指针). 这个 字符串 可能
是在 静态 存储区 中
分配 的. 之后 用 相应的
category 和 这个 字符串 作为
参数 再去 调用 这个
函数 会 重新 把 程序
区域选项 的 相应 部分
恢复. 如果 请求 不能
完成 将会 返回
NULL .
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@263.net>
[中文版最新更新]¶
2001/12/2
[中国Linux论坛man手册页翻译计划]¶
http://cmpp.linuxforum.net