名 前
locale − 多 言 語 サ ポ ー ト の 解 説
書 式
#include <locale.h>
説 明
ロ ケ ー ル (locale) は 言 語 や 文 化 ル ー ル の 集 合 で あ る 。 こ れ に は 、 メ ッ セ ー ジ 出 力 に 使 用 す る 言 語 、 様 々 な 文 字 集 合 、 表 記 に 関 す る 慣 習 な ど が 含 ま れ る 。 プ ロ グ ラ ム を い ろ い ろ な 文 化 に 移 植 可 能 と す る に は 、 プ ロ グ ラ ム が 自 分 の ロ ケ ー ル を 判 定 し 、 そ れ に 応 じ た 適 切 な 動 作 が で き る 必 要 が あ る 。 ヘ ッ ダ ー フ ァ イ ル <locale.h> に は 、 こ の た め の 便 利 な デ ー タ 型 、 関 数 、 マ ク ロ な ど の 宣 言 が あ る 。 こ の ヘ ッ ダ ー フ ァ イ ル で 宣 言 さ れ て い る 関 数 に は 、 現 在 の ロ ケ ー ル を 設 定 す る setlocale(3) と 、 数 値 の フ ォ ー マ ッ ト 方 法 に つ い て の 情 報 を 取 得 す る localeconv(3) が あ る 。 ロ ケ ー ル 情 報 は 、 プ ロ グ ラ ム が 必 要 と す る と 思 わ れ る い く つ か の カ テ ゴ リ ー に 分 か れ て お り 、 そ れ ら は マ ク ロ と し て 宣 言 さ れ て い る 。 こ れ ら の マ ク ロ を setlocale(3) 関 数 の 最 初 の 引 き 数 に 用 い る と 、 各 カ テ ゴ リ ー を 望 む ロ ケ ー ル に 設 定 で き る 。
LC_ADDRESS (GNU 拡
張 、 glibc 2.2 以 降 ) 場
所 や 地 理 関 連
の 項 目 の 表 示
に 使 用 す る フ
ォ ー マ ッ ト (郵
便 番 号 な ど ) に
関 す る 設 定 を
変 更 す る 。 こ
の 情 報 が 必 要
な ア プ リ ケ ー
シ ョ ン は nl_langinfo(3)
を 使 っ て 非 標
準 の 要 素 を 取
得 で き る 。
_NL_ADDRESS_COUNTRY_NAME (指 定 さ
れ た ロ ケ ー ル
の 言 語 で の 国
名 ) や _NL_ADDRESS_LANG_NAME (指
定 さ れ た ロ ケ
ー ル の 言 語 で
の 言 語 名 ) な ど
が あ り 、 ド イ
ツ 語 ロ ケ ー ル
で は "Deutschland" と
"Deutsch" と い っ た
文 字 列 が 返 さ
れ る 。 他 の 要
素 名 に つ い て
は <langinfo.h> に リ
ス ト が あ る 。
LC_COLLATE こ の カ テ ゴ
リ ー は 、 並 び
換 え (sorting) や 正 規
表 現 で 使 用 さ
れ る 照 合 順 序
(collate) を 制 御 す る
。 そ の 中 に は
、 文 字 の 等 価
ク ラ ス や 複 数
文 字 の 照 合 順
序 も 含 ま れ る
。 こ の ロ ケ ー
ル カ テ ゴ リ ー
は 、 地 域 的 な
ア ル フ ァ ベ ッ
ト 文 字 列 の 比
較 に 使 用 す る
strcoll(3) 関 数 と
strxfrm(3) 関 数 の 動
作 を 変 更 す る
。 例 え ば ド イ
ツ 語 の エ ス ツ
ェ ッ ト (鋭 い s) は
、 ソ ー ト の 際
"ss" と し て 扱 わ
れ る 。
LC_CTYPE こ の カ テ ゴ
リ ー は 、 バ イ
ト 列 の 文 字 と
し て の 解 釈 (例
え ば 、 シ ン グ
ル バ イ ト 文 字
と マ ル チ バ イ
ト 文 字 か )、 文
字 ク ラ ス (例 え
ば 、 ア ル フ ァ
ベ ッ ト か 数 字
か ) や 文 字 ク ラ
ス の 動 作 を 決
定 す る 。 こ れ
は isupper(3) や toupper(3)
の よ う な 文 字
の 判 定 ・ 操 作
を す る 関 数 や
、 多 バ イ ト 文
字 を 扱 う mblen(3) や
wctomb(3) の よ う な
関 数 の 動 作 を
変 更 す る 。
LC_IDENTIFICATION (GNU 拡 張 、 glibc
2.2 以 降 ) ロ ケ ー ル
の メ タ デ ー タ
に 関 連 す る 設
定 を 変 更 す る
。 こ の 情 報 が
必 要 な ア プ リ
ケ ー シ ョ ン は
nl_langinfo(3) を 使 っ て
非 標 準 の 要 素
を 取 得 で き る
。 _NL_IDENTIFICATION_TITLE (こ の
ロ ケ ー ル 文 書
の タ イ ト ル ) や
_NL_IDENTIFICATION_TERRITORY (こ の
ロ ケ ー ル 文 書
が 適 用 さ れ る
地 理 的 な 範 囲 )
な ど が あ り 、
"English locale for the USA" や
"USA" と い っ た 文
字 列 が 返 さ れ
る 。 他 の 要 素
名 に つ い て は
<langinfo.h> に リ ス
ト が あ る 。
LC_MONETARY こ の カ テ ゴ
リ ー は 、 金 額
に 関 連 す る 数
値 の 表 示 方 法
を 決 定 す る 。
localeconv(3) に よ っ て
返 さ れ る 情 報
を 変 更 す る 。
こ れ に は 小 数
点 や 区 切 り コ
ン マ の 位 置 な
ど 、 数 字 の 表
示 方 法 に 関 す
る 詳 細 が 含 ま
れ て い る 。 こ
の 情 報 は strfmon(3)
関 数 が 内 部 で
使 用 す る 。
LC_MESSAGES こ の カ テ ゴ
リ ー は 、 メ ッ
セ ー ジ 表 示 に
使 用 す る 言 語
と 、 肯 定 的 ・
否 定 的 な 回 答
を ど の よ う に
表 示 す る か に
影 響 す る 。 こ
の 情 報 を 簡 単
に 使 用 す る た
め に 、 GNU C ラ イ ブ
ラ リ に は gettext(3),
ngettext(3), rpmatch(3) 関 数
が 含 ま れ て い
る 。 GNU gettext フ ァ ミ
リ ー に 属 す る
関 数 は 、 カ テ
ゴ リ ー が "C"
以 外 の 有 効 な
ロ ケ ー ル に 設
定 さ れ て い る
場 合 、 環 境 変
数 LANGUAGE に も 従 う
(LANGUAGE は コ ロ ン
区 切 り の ロ ケ
ー ル の リ ス ト
で あ る )。 こ の
カ テ ゴ リ ー は
catopen(3) の 動 作 に
も 影 響 す る 。
LC_MEASUREMENT (GNU 拡 張 、 glibc 2.2
以 降 ) ロ ケ ー ル
の 測 定 系 (つ ま
り 、 メ ー ト ル
法 か ア メ リ カ
で よ く 使 わ れ
る 単 位 か ) に 関
連 す る 設 定 を
変 更 す る 。 こ
の 情 報 が 必 要
な ア プ リ ケ ー
シ ョ ン は nl_langinfo(3)
を 使 っ て 非 標
準 の 要 素 で あ
る _NL_MEASUREMENT_MEASUREMENT を
取 得 で き る 。
こ の 要 素 は 1 (メ
ー ト ル 法 ) か 2 (ア
メ リ カ で よ く
使 わ れ る 単 位 )
の 値 が 入 っ た
文 字 列 へ の ポ
イ ン タ ー を 返
す 。
LC_NAME (GNU 拡 張 、 glibc 2.2
以 降 ) 人 に 呼 び
か け る 際 に 使
用 さ れ る フ ォ
ー マ ッ ト に 関
す る 設 定 を 変
更 す る 。 こ の
情 報 が 必 要 な
ア プ リ ケ ー シ
ョ ン は nl_langinfo(3) を
使 っ て 非 標 準
の 要 素 を 取 得
で き る 。 _NL_NAME_NAME_MR
(男 性 に 対 す る
一 般 的 な 呼 び
掛 け ) や _NL_NAME_NAME_MS
(女 性 に 対 す る
一 般 的 な 呼 び
掛 け ) な ど が あ
り 、 ド イ ツ 語
ロ ケ ー ル で は
"Herr" や "Frau" と い
っ た 文 字 列 が
返 さ れ る 。 他
の 要 素 名 に つ
い て は <langinfo.h>
に リ ス ト が あ
る 。
LC_NUMERIC こ の カ テ ゴ
リ ー は 、 金 額
に 関 係 し な い
数 値 で 使 用 さ
れ る 表 示 方 法
を 決 定 す る 。
例 え ば 、 1000 単 位
の 区 切 り 文 字
や 小 数 点 文 字
(ほ と ん ど の 英
語 圏 の 国 で は
ピ リ オ ド を 使
用 す る が 、 多
く の 他 の 地 域
で は カ ン マ を
使 用 す る )。 こ
の カ テ ゴ リ ー
は printf(3), scanf(3), strtod(3)
な ど の 関 数 の
動 作 に 影 響 す
る 。 こ の 情 報
は localeconv(3) 関 数 で
も 読 み 出 す こ
と が で き る 。
LC_PAPER (GNU 拡 張 、 glibc 2.2
以 降 ) 標 準 的 な
紙 の サ イ ズ の
寸 法 (US letter や A4 な ど )
に 関 す る 設 定
を 変 更 す る 。
こ の 情 報 が 必
要 な ア プ リ ケ
ー シ ョ ン は
nl_langinfo(3) を 使 っ て
非 標 準 の 要 素
で あ る _NL_PAPER_WIDTH と
_NL_PAPER_HEIGHT を 取 得 で
き る 。 こ の 要
素 は ミ リ メ ー
タ ー 単 位 の 寸
法 を 指 定 す る
int 値 を 返 す 。
LC_TELEPHONE (GNU 拡 張 、 glibc 2.2
以 降 ) 電 話 サ ー
ビ ス で 使 用 さ
れ る フ ォ ー マ
ッ ト に 関 す る
設 定 を 変 更 す
る 。 こ の 情 報
が 必 要 な ア プ
リ ケ ー シ ョ ン
は nl_langinfo(3) を 使 っ
て 非 標 準 の 要
素 を 取 得 で き
る 。 _NL_TELEPHONE_INT_PREFIX (そ
の ロ ケ ー ル で
の 電 話 番 号 の
前 に 付 く 国 を
示 す 番 号 ) な ど
が あ る 。 "49" (ド
イ ツ の 場 合 ) と
い っ た 文 字 列
が 返 さ れ る 。
他 の 要 素 名 に
つ い て は
<langinfo.h> に リ ス
ト が あ る 。
LC_TIME こ の カ テ ゴ
リ ー は 、 日 付
と 時 刻 の 値 に
使 用 さ れ る 表
示 方 法 を 制 御
す る 。 例 え ば
、 ヨ ー ロ ッ パ
の ほ と ん ど で
は 24 時 間 時 計 を
使 用 す る が 、
ア メ リ カ で は 12
時 間 時 計 を 使
用 す る 。 こ の
カ テ ゴ リ ー の
設 定 は strftime(3) や
strptime(3) な ど の 関
数 の 動 作 に 影
響 す る 。
LC_ALL 上 記 の 全 て 。 |
setlocale(3) の 二 番 目 の 引 き 数 が 空 文 字 列 "" の 場 合 、 デ フ ォ ル ト の ロ ケ ー ル は 以 下 の 手 順 で 決 定 す る :
1. 環 境 変 数 |
LC_ALL が 設 定 さ れ て い る 場 合 に は LC_ALL の 値 が 使 用 さ れ |
る 。
2. 上 記 の カ テ ゴ リ ー の ど れ か と 同 じ 名 前 の 環 境 変 数 が 設 定 さ れ て い る 場 合 に は 、 そ の カ テ ゴ リ ー に は そ の 値 が 使 用 さ れ る 。 | |
3. 環 境 変 数 |
LANG が 設 定 さ れ て い る 場 合 に は LANG の 値 が 使 用 さ れ る 。 地 域 的 な 数 値 フ ォ ー マ ッ ト の 情 報 は localeconv(3) 関 数 に よ っ て 返 さ れ る struct lconv で 得 る こ と が で き 、 こ れ は 以 下 の よ う に 宣 言 さ れ て い る :
struct lconv {
/* (通 貨 以 外 の ) 数 値 情 報 */
char
*decimal_point; /* 小 数 点 の
文 字 */
char *thousands_sep; /* 小 数 点 の
左 側 の 数 字 の
グ ル ー プ の 区
切 り 文 字
*/
char *grouping; /* そ れ ぞ れ
の 要 素 は 各 グ
ル ー プ の 数 字
の 個 数 で あ る
。 イ ン デ ッ ク
ス 値 が 大 き い
ほ ど 、 左 側 の
グ ル ー プ を 表
す 。 要 素 の 値
が
CHAR_MAX の 場 合 は 、
最 後 の グ ル ー
プ で あ る こ と
を 意 味 す る 。
要 素 の 値 が
0 の 場 合 は 、 そ
の 要 素 よ り 左
側 の 全 て の 要
素 に 前 の 要 素
と 同 じ 値 を 使
用 す る こ と を
意 味 す る 。
*/
/* 残 り の フ ィ ー ル ド は 通 貨 情 報 用 で あ る */
char
*int_curr_symbol; /* 最 初 の 三
つ の 文 字 は ISO 4217
の 通 貨 記 号 。
四 番 目 の 文 字
は 区 切 り 文 字
。 五 番 目 は
' '。 */
char *currency_symbol; /* 地 域 の
通 貨 記 号 */
char *mon_decimal_point; /* 小 数 点
の 文 字 */
char *mon_thousands_sep; /* 上 記 の
’thousands_sep’ と 同 様 */
char *mon_grouping; /* 上 記 の
’grouping’ と 同 様 */
char *positive_sign; /* 正 の 値 の
符 号 */
char *negative_sign; /* 負 の 値 の
符 号 */
char int_frac_digits; /* 国 際 的 な
小 数 部 の 数 字 */
char frac_digits; /* 地 域 の 小
数 部 の 数 字 */
char p_cs_precedes; /* 正 の 値 の
前 に 通 貨 記 号
を 置 く 場 合 は 1,
後 ろ に 置 く 場
合 は
0 */
char p_sep_by_space; /* 正 の 値 と
通 貨 記 号 の 間
に ス ペ ー ス を
入 れ る 場 合 は
1 */
char n_cs_precedes; /* 負 の 値 の
前 に 通 貨 記 号
を 置 く 場 合 は 1,
後 ろ に 置 く 場
合 は
0 */
char n_sep_by_space; /* 負 の 値 と
通 貨 記 号 の 間
に ス ペ ー ス を
入 れ る 場 合 は
1 */
/* 正 と 負 の 符 号
の 位 置 :
0 値 と 通 貨 記 号
を 括 弧 で 囲 む
1 符 号 は 値 と 通
貨 記 号 の 前 に
置 く
2 符 号 は 値 と 通
貨 記 号 の 後 に
置 く
3 符 号 は 通 貨 記
号 の 直 後 に 置
く
4 符 号 は 通 貨 記
号 の 直 前 に 置
く */
char p_sign_posn;
char n_sign_posn; }; ロ ケ ー ル
API の POSIX.1−2008 で の 拡
張
POSIX.1−2008 で は 、 ロ ケ ー ル API へ の 多 く の 拡 張 が 標 準 化 さ れ て い る 。 こ れ は GNU C ラ イ ブ ラ リ の バ ー ジ ョ ン 2.3 で 初 め て 登 場 し た 実 装 に 基 づ い て い る 。 こ れ ら の 拡 張 は 、 従 来 の ロ ケ ー ル API が マ ル チ ス レ ッ ド ア プ リ ケ ー シ ョ ン や 複 数 の ロ ケ ー ル を 扱 う 必 要 が あ る ア プ リ ケ ー シ ョ ン と う ま く 組 み 合 わ せ て 使 う こ と が で き な い 問 題 を 解 決 す る た め に 設 計 さ れ た 。 こ の 拡 張 は 、 ロ ケ ー ル オ ブ ジ ェ ク ト の 作 成 、 操 作 の た め の 新 し い 関 数 (newlocale(3), freelocale(3), duplocale(3), uselocale(3)) と サ フ ィ ッ ク ス "_l" が 付 い た 新 し い ラ イ ブ ラ リ 関 数 (toupper_l(3) な ど ) で 構 成 さ れ る 。 新 し い ラ イ ブ ラ リ 関 数 は 、 従 来 の ロ ケ ー ル 依 存 の API (toupper(3) な ど ) を 関 数 実 行 時 に 適 用 す る ロ ケ ー ル オ ブ ジ ェ ク ト の 指 定 が で き る よ う に 拡 張 し た も の で あ る 。
環 境 変 数
以 下 の 環 境 変 数 が newlocale(3) と setlocale(3) で 使 用 さ れ る 。 し た が っ て 、 特 権 を 持 た な い ロ ケ ー ル を 参 照 す る す べ て の プ ロ グ ラ ム に 影 響 が あ る 。
LOCPATH コ ロ ン (':') 区 切 り の 、 ロ ケ ー ル デ ー タ を 検 索 す る パ ス 名 の リ ス ト 。 こ の 変 数 が 設 定 さ れ る と 、 LOCPATH と シ ス テ ム の デ フ ォ ル ト の ロ ケ ー ル デ ー タ の パ ス に あ る 、 個 々 の コ ン パ イ ル さ れ た ロ ケ ー ル デ ー タ フ ァ イ ル だ け が 使 用 さ れ る 。 ロ ケ ー ル ア ー カ イ ブ は 利 用 可 能 で も 使 用 さ れ な い (localedef(1) 参 照 )。 個 々 の コ ン パ イ ル さ れ た ロ ケ ー ル デ ー タ フ ァ イ ル は 、 現 在 使 用 さ れ て い る ロ ケ ー ル に 応 じ た サ ブ デ ィ レ ク ト リ か ら 検 索 さ れ る 。 例 え ば 、 あ る カ テ ゴ リ ー で en_GB.UTF−8 が 使 用 さ れ て い る 場 合 、 サ ブ デ ィ レ ク ト リ en_GB.UTF−8, en_GB.utf8, en_GB, en.UTF−8, en.utf8, en が こ の 順 序 で 検 索 さ れ る 。
フ ァ イ ル
/usr/lib/locale/locale−archive
通 常 の デ フ ォ
ル ト の ロ ケ ー
ル ア ー カ イ ブ
フ ァ イ ル
/usr/lib/locale コ ン パ イ
ル さ れ た ロ ケ
ー ル フ ァ イ ル
の 通 常 の デ フ
ォ ル ト の パ ス
。
準 拠
POSIX.1−2001.
関 連 項 目
locale(1), localedef(1), catopen(3), gettext(3), localeconv(3), mbstowcs(3), newlocale(3), ngettext(3), nl_langinfo(3), rpmatch(3), setlocale(3), strcoll(3), strfmon(3), strftime(3), strxfrm(3), uselocale(3), wcstombs(3), locale(5), charsets(7), unicode(7), utf−8(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。