Imported upstream version 1.5
[manpages-zh.git] / src / man3 / setlocale.3
blob8d62babc85165fa7c0761c00030d68d878c3501d
1 .\" (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
2 .\" and 1999 by Bruno Haible (haible@clisp.cons.org)
3 .\"
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
7 .\"
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one
12 .\" 
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein.  The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
19 .\" professionally.
20 .\" 
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
23 .\" License.
24 .\" Modified Sat Jul 24 18:20:12 1993 by Rik Faith (faith@cs.unc.edu)
25 .\" Modified Tue Jul 15 16:49:10 1997 by Andries Brouwer (aeb@cwi.nl)
26 .\" Modified Sun Jul  4 14:52:16 1999 by Bruno Haible (haible@clisp.cons.org)
27 .\" Modified Tue Aug 24 17:11:01 1999 by Andries Brouwer (aeb@cwi.nl)
28 .\" Modified Tue Feb  6 03:31:55 2001 by Andries Brouwer (aeb@cwi.nl)
29 .TH SETLOCALE 3  1999-07-04 "GNU" "Linux Programmer's Manual"
31 .SH NAME
32 setlocale \- 设置当前的区域选项
34 .SH "总览 (SYNOPSIS)"
35 .nf
36 .B #include <locale.h>
37 .sp
38 .BI "char *setlocale(int " category ", const char * " locale ");"
39 .fi
41 .SH "描述 (DESCRIPTION)"
42 .B setlocale()
43 函数 用来 设置 或者 查询 程序 当前 的 区域选项.
44 .PP
45 如果
46 .I locale
47 不是
48 .BR NULL ,
49 程序 就会 根据 参数 更改 相应的 区域选项.
50 .I category
51 参数 指定 区域选项 的 哪一部分 需要 更改.
52 .TP
53 .B LC_ALL
54 代表 所有 部分.
55 .TP
56 .B LC_COLLATE
57 代表 正则 表达式 匹配 (和 范围 表达式[range expressions] 以及 字符类[classes]
58 有关系) 和 字符串 排序.
59 .TP
60 .B LC_CTYPE
61 代表 正则 表达式 匹配, 字符类(character classification), 转换, 区分大小写 的
62 比较, 以及 宽字符 函数.
63 .TP
64 .B LC_MESSAGES
65 代表 可以 本地化的 消息 (自然语言).
66 .TP
67 .B LC_MONETARY
68 代表 货币 格式.
69 .TP
70 .B LC_NUMERIC
71 代表 数字 格式 (比如 小数点 和 千位分组符).
72 .TP
73 .B LC_TIME
74 代表 时间 和 日期 格式.
75 .PP
76 .I locale
77 参数 是 一个 指向 字符串的 指针. 此 字符串 为
78 .IR category
79 需要的 设置. 此 字符串 可以是 一个 众所周知 的 区域选项 常量, 如 "C" 或 "da_DK"
80 (见下), 也可以是 另外 一个
81 .BR setlocale
82 调用 返回 的 字符串.
83 .PP
84 如果
85 .I locale
86
87 .BR """""" ,
88 需要 更改 的 部分 会根据 环境变量 做 相应的 设置. 具体的 和 实现 有关. 对于
89 glibc 来说, 首先 查看
90 .\" [This is false on my system - must check which library versions do this]
91 .\" if
92 .\" .I category
93 .\" is LC_MESSAGES, the environment variable LANGUAGE is inspected,
94 .\" then
95 环境变量 LC_ALL (不管
96 .IR category ), 然后 查看 和 category
97 (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME)
98 同名的 环境变量, 最后 查看 环境变量 LANG. 以 先查到 的 环境变量 为准. 如果 其值
99 不是 一个 有效 的 区域选项, 区域选项 将 不会改变,
100 .B setlocale
101 会 返回 NULL.
102 .\" The environment variable LANGUAGE may contain several, colon-separated,
103 .\" locale names.
105 标准 区域选项
106 .B """C"""
108 .B """POSIX"""
109 是 可移植的; 它的 LC_CTYPE 部分 对应的 是 7 位的 ASCII 字符集.
111 一个 典型的 区域选项 有 如下的 格式:
112 .IR language "[_" territory "][." codeset "][@" modifier "],"
113 其中
114 .I language
115 是 一个 ISO 639 语言 代码,
116 .I territory
117 是 一个 ISO 3166 国家 代码,
118 .I codeset
119 是 一个 象
120 .B "ISO-8859-1"
121 或者
122 .BR "UTF-8"
123 的 字符集 或者 编码 标识符. 用 "locale -a", cf.\&
124 .BR locale (1)
125 可以 获得 一个 系统 支持的 区域选项 的 列表.
127 如果
128 .I locale
130 .BR NULL ,
131 意味着 只是 查询 当前 的 区域选项 而不 更改它.
133 当 main 程序 开始的 时候 可移植的
134 .B """C"""
135 区域选项 作为 默认值 被设置. 一个 程序 可以 在 初始化 之后 调用
136 .B setlocale(LC_ALL, """""")
137 函数, 并且 从
138 .B localeconv()
139 调用 的 返回 中 获得 和 区域选项 相关的 信息, 如果
140 .BR "MB_CUR_MAX > 1"
141 就用 多字节 和 宽字节 函数 来 处理 文本, 用
142 .BR strcoll() ", " wcscoll()
143 或者
144 .BR strxfrm() ", " wcsxfrm()
145 来 比较 字符串, 这样 就可以 使 程序 有 较好的 移植性.
147 .SH "返回值 (RETURN VALUE)"
148 一个 成功的
149 .B setlocale()
150 调用 会 返回 一个 表示 当前 区域选项 的 字符串 (指针). 这个 字符串 可能 是在
151 静态 存储区 中 分配 的. 之后 用 相应的 category 和 这个 字符串 作为 参数 再去
152 调用 这个 函数 会 重新 把 程序 区域选项 的 相应 部分 恢复. 如果 请求 不能 完成
153 将会 返回
154 .B NULL .
156 .SH "遵循 (CONFORMING TO)"
157 ANSI C, POSIX.1
159 .SH "注意 (NOTES)"
160 Linux (也就是, GNU libc) 支持 可移植的
161 .BR """C""" " 和 " """POSIX"""
162 区域选项. 在 以前 它 曾经 支持 欧洲 Latin-1 区域选项
163 .B """ISO-8859-1"""
164 (比如说 在 libc-4.5.21 和 libc-4.6.27 中), 和 俄罗斯的
165 .B """KOI-8"""
166 (更 准确点 是, "koi-8r") 区域选项 (比如 在 libc-4.6.27 中), 所以 设置 一个
167 环境变量 LC_CTYPE=ISO-8859-1 就 能够 让 isprint() 返回 正确的 结果. 现在 不讲
168 英语 的 欧洲人 会 比以前 更麻烦 一些, 他们 需要 安装 相应 的 区域选项 文件.
170 .SH "参见 (SEE ALSO)"
171 .BR locale (1),
172 .BR localedef (1),
173 .BR strcoll (3),
174 .BR isalpha (3),
175 .BR localeconv (3),
176 .BR strftime (3),
177 .BR charsets (4),
178 .BR locale (7)
180 .SH "[中文版维护人]"
181 .B 唐友 \<tony_ty@263.net\>
182 .SH "[中文版最新更新]"
183 .BR 2001/12/2
184 .SH "[中国Linux论坛man手册页翻译计划]"
185 .BI http://cmpp.linuxforum.net