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