| LOCALE(7) | Linux Programmer's Manual | LOCALE(7) |
locale - 多言語サポートの解説
#include <locale.h>
ロケール (locale) は言語や文化ルールの集合である。 これには、メッセージ出力に使用する言語、 様々な文字集合、 表記に関する慣習などが含まれる。 プログラムをいろいろな文化に移植可能とするには、 プログラムが自分のロケールを判定し、 それに応じた適切な動作ができる必要がある。
ヘッダーファイル <locale.h> には、 このための便利なデータ型、 関数、 マクロなどの宣言がある。
このヘッダーファイルで宣言されている関数には、 現在のロケールを設定する setlocale(3) と、数値のフォーマット方法についての情報を取得する localeconv(3) がある。
ロケール情報は、 プログラムが必要とすると思われるいくつかのカテゴリーに分かれており、 それらはマクロとして宣言されている。 これらのマクロを setlocale(3) 関数の最初の引数に用いると、 各カテゴリーを望むロケールに設定できる。
setlocale(3) の二番目の引数が空文字列 "" の場合、 デフォルトのロケールは以下の手順で決定する:
地域的な数値フォーマットの情報は localeconv(3) 関数によって返される struct lconv で得ることができ、これは以下のように宣言されている:
struct lconv {
/* (通貨以外の) 数値情報 */
char *decimal_point; /* Radix character */
char *thousands_sep; /* Separator for digit groups to left
of radix character */
char *grouping; /* Each element is the number of digits in
a group; elements with higher indices
are further left. An element with value
CHAR_MAX means that no further grouping
is done. An element with value 0 means
that the previous element is used for
all groups further left. */
/* 残りのフィールドは通貨情報用である */
char *int_curr_symbol; /* First three chars are a currency
symbol from ISO 4217. Fourth char
is the separator. Fifth char
is '\0'. */
char *currency_symbol; /* Local currency symbol */
char *mon_decimal_point; /* Radix character */
char *mon_thousands_sep; /* Like thousands_sep above */
char *mon_grouping; /* Like grouping above */
char *positive_sign; /* Sign for positive values */
char *negative_sign; /* Sign for negative values */
char int_frac_digits; /* International fractional digits */
char frac_digits; /* Local fractional digits */
char p_cs_precedes; /* 1 if currency_symbol precedes a
positive value, 0 if succeeds */
char p_sep_by_space; /* 1 if a space separates
currency_symbol from a positive
value */
char n_cs_precedes; /* 1 if currency_symbol precedes a
negative value, 0 if succeeds */
char n_sep_by_space; /* 1 if a space separates
currency_symbol from a negative
value */
/* Positive and negative sign positions:
0 Parentheses surround the quantity and currency_symbol.
1 The sign string precedes the quantity and currency_symbol.
2 The sign string succeeds the quantity and currency_symbol.
3 The sign string immediately precedes the currency_symbol.
4 The sign string immediately succeeds the currency_symbol. */
char p_sign_posn;
char n_sign_posn;
};
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) で使用される。 したがって、 特権を持たないロケールを参照するすべてのプログラムに影響がある。
POSIX.1-2001.
iconv(1), locale(1), localedef(1), catopen(3), gettext(3), iconv(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 プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。
| 2019-03-06 | Linux |