スポンサーリンク

SETLOCALE(3) FreeBSD ライブラリ関数マニュアル SETLOCALE(3)

名称

setlocale, localeconv − C 用の自然言語の整形

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <locale.h>

char *

setlocale(int category, const char *locale);

struct lconv *

localeconv(void);

解説

setlocale() 関数は、特定のルーチンの集合について、C ライブラリでいうとこ ろの自然言語整形のスタイルを設定します。それぞれのスタイルを ‘ロケール’ と呼び、C 文字列として渡される適切な名前によって呼び出します。 localeconv() ルーチンは、現在のロケールの数値整形用パラメータを返します。

setlocale() 関数は、いくつかのルーチンのカテゴリを識別します。以下は、カ テゴリとカテゴリが選択したルーチンの組です。

       LC_ALL

ロケール全体をまとめて設定します。

LC_COLLATE
文字列照合ルーチン用のロケールを設定します。これは strcoll() および strxfrm() でのアルファベット順を制御します。

LC_CTYPE
ctype(3), mbrune(3), multibyte(3) および rune(3) の各関数の ロケールを設定します。これは、大文字と小文字、アルファベット と非アルファベット文字などの識別を制御します。実際の作業は setrunelocale() 関数によって行われます。

LC_MESSAGES
メッセージカタログのロケールを設定します。 catopen(3) 関数を 参照してください。

LC_MONETARY
通貨値の整形用ロケールを設定します。これは localeconv() 関数 に影響を及ぼします。

LC_NUMERIC
数字を整形するためのロケールを設定します。これは、 localeconv() によって返される値を制御するのに加えて、 printf() および scanf() のような関数の浮動小数点入出力の小数 点整形方法も制御します。

LC_TIME
strftime
() 関数を使用して日付と時刻を整形するためのロケール を設定します。

デフォルトでは 3 つのロケールだけが定義されています。空の文字列 "" はネイ ティブの環境を表します。そして "C" および "POSIX" ロケールは C 言語環境を 表します。 locale 引数が NULL の場合には、 setlocale() は現在のロケールを 戻します。デフォルトでは、 C プログラムは "C" ロケールで開始します。ロ ケールを設定する唯一のライブラリ内関数は setlocale() です。ロケールは他の ルーチンの副作用として変更されることはありません。

localeconv() 関数は、数字、特に通貨値の整形用パラメータを提供する構造体を 指すポインタを返します。

struct lconv {

char

*decimal_point;

char

*thousands_sep;

char

*grouping;

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;

char

p_cs_precedes;

char

p_sep_by_space;

char

n_cs_precedes;

char

n_sep_by_space;

char

p_sign_posn;

char

n_sign_posn;

};

個々のフィールドには次の意味があります。

       decimal_point

通貨値を除く、小数点文字です。

thousands_sep
通貨値を除く、小数点の前の桁のグループ間の区切り文字で す。

grouping
通貨値を除く、桁のグループの大きさです。これは、 char 型の、低い位の桁から高い位の桁 (右から左) までのグルー プの大きさを表す整数の配列を指すポインタです。そのリス トは、0 または CHAR_MAX で終わります。リストが 0 で終 了する場合には、0 の前の最後のグループの大きさを、全て の桁が埋まるまで繰り返し用います。 CHAR_MAX で終了する 場合には、それ以上のグループ化は実行されません。

int_curr_symbol
標準で定められた国際通貨記号です。

currency_symbol
ローカルな通貨記号です。

mon_decimal_point
通貨値に対する小数点文字です。

mon_thousands_sep
通貨値内の桁のグループについての区切り文字です。

mon_grouping
grouping
に類似していますが、通貨用です。

positive_sign
非負の通貨値を表記するのに使用される文字で、通常は空の 文字列です。

negative_sign
負の通貨値を表現するのに使用される文字で、通常はマイナ ス符号です。

int_frac_digits
国際スタイルの通貨値における小数点以下の桁数です。

frac_digits
ローカルスタイルの通貨値における小数点以下の桁数です。

p_cs_precedes
非負の値に対して通貨値の前に通貨記号が置かれる場合には 1、そうでない場合には 0 です。

p_sep_by_space
非負の値に対して通貨記号と通貨値の間に空白が挿入されて いる場合は 1、そうでない場合には 0 です。

n_cs_precedes
負の値に対して p_cs_precedes と同様です。

n_sep_by_space
負の値に対して p_sep_by_space と同様です。

p_sign_posn
非負の量および currency_symbol に関する positive_sign の位置です。コードは次の通りです。
0
文字列全体を囲む丸括弧です。
1
文字列の前です。
2
文字列の後です。
3
currency_symbol
の直前です。
4
currency_symbol
の直後です。

n_sign_posn
負の通貨値に対して p_sign_posn と同様です。

前述した場合を除いて、フィールドの値としての空の文字列は、結果の長さがゼ ロであるか、または現在のロケール内にはない値であることを示します。同様に CHAR_MAX の結果は利用できない値を表記します。

戻り値

setlocale() 関数は、指定の categorylocale の組み合わせが意味をなさな い場合には、 NULL を返してロケールの変更は失敗します。 localeconv() 関数 は、後の setlocale() または localeconv() の呼び出しで変更される可能性のあ る静的オブジェクトを指すポインタを返します。

ファイル

       $PATH_LOCALE/locale/category

/usr/share/locale/locale/category
ロケール locale とカテゴリ category 用 のロケールファイル

関連項目

colldef(1), mklocale(1), catopen(3), ctype(3), mbrune(3), multibyte(3), rune(3), strcoll(3), strxfrm(3), euc(4), utf2(4)

規格

setlocale() および localeconv() 関数は、 ISO/IEC 9899:1990 (‘‘ISO C89’’) に適合しています。

歴史

setlocale() および localeconv() 関数は、 4.4BSD ではじめて登場しました。

バグ

現在の実装は、 LC_COLLATE, LC_CTYPE および LC_TIME のカテゴリ以外では、 "C" と "POSIX" ロケールのみサポートしています。

localeconv() における整然としない通貨サポートにも関わらず、規格は、一般化 された通貨フォーマットのための関数を組み入れていません。

われわれがリアルタイムの通貨変換機能を持つまでは、 LC_MONETARY の使用は間 違った結果を導く可能性があります。 LC_NUMERIC および LC_TIME は個人的な選 択肢であり、他のカテゴリで覆い隠すべきではありません。

FreeBSD 10.0 June 9, 1993 FreeBSD 10.0

スポンサーリンク