locale - 描述多語言支援
#include <locale.h>
locale
就是一系列語言文化規則.
它包括如下一些方面:
訊息的語言,
不同字元設定,
文字慣例, 等等.
程式需要能夠判斷其
locale
並根據適合於不同文化的要求來執行.
標頭檔案
<locale.h>
聲明瞭用於該項作業中的資料型別,函式和宏.
它宣告的函式有:
setlocale()
用來設定當前 locale,
localeconv()
用來獲得數字格式方面的資訊.
程式可能需要的本地化資訊會有不同的種類;
它們都以宏的方式宣告
把它們當做
setlocale()
的第一個引數來用,
就可以把其中一個設定為需要的
locale:
- LC_COLLATE
- 這用來修改函式
strcoll() 和 strxfrm()
的執行方式, 其中 strxfrm()
函式用來以本地化字母表進行字串比較.
例如, 德國升半音的 s
排序為 "ss".
- LC_CTYPE
- 修改字元處理分類函式如
isupper() 和 toupper()
的執行方式,
還修改多位元組字元函式如
mblen() 或者 wctomb()
的執行方式.
- LC_MONETARY
- 修改由 localeconv()
返回的資訊,
這些資訊描述了數字,
以及諸如
小數點和千進位逗號之類輸出的常見格式的細節.
這些資訊由函式 strfmon()
在內部呼叫.
- LC_MESSAGES
- 修改顯示的語言資訊以及正值和負值的表達方式.
GNU C-library包含: rpmatch()
函式用於方便地使用這些資訊.
- LC_NUMERIC
- 在考慮使用 locale
設定時,修改 printf() 和
scanf()
函式族使用的資訊.該資訊也可以由
localeconv() 函式讀取.
- LC_TIME
- 修改 strftime()
函式的執行方式以顯示適於當地格式的當前時間;
例如,歐洲的絕大部分地區使用的是
24 小時的時鐘,
而美國則是 12
小時的時鐘.
- LC_ALL
- 上述所有的.
如果
setlocale()
的第二個引數為空,
則設定
"",
為預設的locale,它透過以下幾步來確定:
- 1.
- 如果有非空的環境變數
LC_ALL, 則使用 LC_ALL
的值.
- 2.
- 如果存在一個與上述列出的種類同名的環境變數並且其不為空,
則使用該分類的值.
- 3.
- 如果有非空的環境變數
LANG, 則使用 LANG 的值.
關於本地數字格式的值用於由
localeconv() 函式返回的
struct lconv
, 其有以下宣告:
struct lconv
{
/* 數碼(非貨幣形式)資訊. */
char *decimal_point; /* 小數點字元. */
char *thousands_sep; /* 千數的分隔符. */
/* 每個元素就是每組的阿拉伯數字;指數越高的元素在越左邊.一個值為CHAR_MAX的元素表示不需繼續
分組了.一個值為0的元素表示前面的字元用於所有更左邊的組. */
char *grouping;
/* 貨幣資訊. */
/* 前三個字元是ISO 4217定義的流通符號.
第四個字元是分隔符. 第五個字元是' '. */
char *int_curr_symbol;
char *currency_symbol; /* 當地貨幣符號. */
char *mon_decimal_point; /* 小數點字元. */
char *mon_thousands_sep; /* 千數的分隔符. */
char *mon_grouping; /* 如前述的'分組'元素. */
char *positive_sign; /* 正值符號. */
char *negative_sign; /* 負值符號. */
char int_frac_digits; /* 國際通用的數字. */
char frac_digits; /* 本地使用的數字. */
/* 如果currency_symbol後跟著一個正值則為1,如果順序相反為0. */
char p_cs_precedes;
/* 如果在currency_symbol和正值之間是一個空格則為1. */
char p_sep_by_space;
/* 如果currency_symbol後跟著一個負值則為1,如果順序相反為0. */
char n_cs_precedes;
/* 如果在currency_symbol和正值之間是一個空格則為1. */
char n_sep_by_space;
/* 正值和負值符號位置:
數量值和currency_symbol在圓括號內則為0.
符號字串先於數量值和currency_symbol則為1.
符號字串在數量值和currency_symbol之後則為2.
符號字串後緊跟數量值和currency_symbol則為3.
符號字串緊跟在數量值和currency_symbol之後則為4. */
char p_sign_posn;
char n_sign_posn;
};
POSIX.1
setlocale(3),
localeconv(3),
locale(1),
localedef(1),
rpmatch(3),
strfmon(3),
strcoll(3),
strxfrm(3),
strftime(3)
riser <[email protected]>
2001/07/19
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh