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