.\" Copyright (c) 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Donn Seeley at BSDI. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)setlocale.3 8.1 (Berkeley) 6/9/93 .\" .Dd June 9, 1993 .Dt SETLOCALE 3 .Os .Sh 名称 .Nm setlocale , .Nm localeconv .Nd C 用の自然言語をフォーマットする .Sh 書式 .Fd #include .Ft char * .Fn setlocale "int category" "const char *locale" .Ft struct lconv * .Fn localeconv "void" .Sh 解説 .Fn setlocale 関数は、特定のルーチンのセットに関して、 C ライブラリにとっての 自然言語フォーマットスタイルの概念を設定します。 このような各スタイル は .Sq ロケール と呼ばれ、 C 文字列として渡される適切な名前を使用して呼び出されます。 .Fn localeconv ルーチンは、現在のロケールの 数値フォーマット用パラメータを返します。 .Pp .Fn setlocale 関数は、ルーチンに関する複数のカテゴリを識別します。 以下は、カテゴリとカテゴリが選択したルーチンのセットです。 .Pp .Bl -tag -width LC_MONETARY .It Dv LC_ALL ロケール全体を一般的に設定します。 .It Dv LC_COLLATE 文字列照合ルーチン用にロケールを設定します。これは .Fn strcoll と .Fn strxfrm でのアルファベット順を制御します。 .It Dv LC_CTYPE .Xr ctype 3 , .Xr mbrune 3 , .Xr multibyte 3 および .Xr rune 3 の各関数のロケールを設定します。 これは、大文字と小文字、アルファベットと非アルファベット文字 などの識別を制御します。実際の作業は .Fn setrunelocale 関数によって行われます。 .It Dv LC_MESSAGES メッセージカタログのロケールを設定します。 .Xr catopen 3 関数を参照してください。 .It Dv LC_MONETARY 通貨値のフォーマット用ロケールを設定します。これは .Fn localeconv 関数に影響を及ぼします。 .It Dv LC_NUMERIC 数字をフォーマットするためのロケールを設定します。これは、 .Fn printf と .Fn scanf のような関数の浮動小数点入出力の小数点フォーマットを 制御します。 .Fn localeconv によって返される値も制御します。 .It Dv LC_TIME .Fn strftime 関数を使用して日付と時刻をフォーマットするための ロケールを設定します。 .El .Pp デフォルトでは 3 つのロケールだけが定義されています。空の文字列 .Li "\&""\|"" はネイティブの環境を表記します。そして .Li "\&""C"" および .Li "\&""POSIX"" ロケール、これは C 言語環境を表記します。 .Fa locale 引数が .Dv NULL の場合、 .Fn setlocale は現在のロケールを戻します。デフォルトでは、 C プログラムは .Li "\&""C"" ロケールで開始します。ロケールを設定する唯一のライブラリ内関数は .Fn setlocale です。 ロケールは他のルーチンの副作用として変更されることはありません。 .Pp .Fn localeconv 関数は、数字、特に通貨値のフォーマット用パラメータを 提供する構造体を指すポインタを返します。 .Bd -literal -offset indent 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; }; .Ed .Pp 個々のフィールドには次の意味があります。 .Pp .Bl -tag -width mon_decimal_point .It Fa decimal_point 小数点文字。通貨値は除きます。 .It Fa thousands_sep 小数点の前の数字のグループ間の分離記号。通貨値は除きます。 .It Fa grouping 数字のグループのサイズ。通貨値は除きます。 これは、整数のベクトルを指すポインタです。各整数のサイズは .Va char であり、低い位の数字から高い位の数字 ( 右から左 ) までのグループのサイズを表します。リストは、 0 または .Dv CHAR_MAX で終了できます。リストが 0 で終了する場合、 0 の前の最後のグループサイズは、すべての数字を埋めるために反復されます。 リストが .Dv CHAR_MAX で終了される場合、それ以上のグループ化は実行されません。 .It Fa int_curr_symbol 標準化された国際通貨シンボル .It Fa currency_symbol ローカルな通貨シンボル .It Fa mon_decimal_point 通貨値に対する小数点文字 .It Fa mon_thousands_sep 通貨値内の数字グループについての分離記号 .It Fa mon_grouping .Fa grouping に類似していますが、通貨用 .It Fa positive_sign 非負の通貨値を表記するのに使用される文字。 通常は空の文字列 .It Fa negative_sign 負の通貨値を表現するのに使用される文字。 通常はマイナス符号 .It Fa int_frac_digits 国際スタイルの通貨値における小数点以下の桁数 .It Fa frac_digits ローカルスタイルの通貨値における小数点以下の桁数 .It Fa p_cs_precedes 非負の値に対して通貨値の前に通貨シンボルが置かれる場合は 1 、通貨シンボルが通貨値の後に続く場合は 0 .It Fa p_sep_by_space 非負の値について通貨シンボルと通貨値の間に 空白が挿入されている場合は 1 、そうでない場合は 0 .It Fa n_cs_precedes 負の値について .Fa p_cs_precedes と同様 .It Fa n_sep_by_space 負の値について .Fa p_sep_by_space と同様 .It Fa p_sign_posn 非負の量および .Fa currency_symbol に関する .Fa positive_sign の位置。コードは次のとおり。 .Bl -tag -width 3n -compact .It Li 0 文字列全体を囲む丸括弧 .It Li 1 文字列の前 .It Li 2 文字列の後 .It Li 3 .Fa currency_symbol の直前 .It Li 4 .Fa currency_symbol の直後 .El .It Fa n_sign_posn 負の通貨値について .Fa p_sign_posn と同様 .El .Pp 前述した場合を除いて、フィールドの値としての空の文字列は、 結果の長さがゼロであるか、または現在のロケール内にはない値で あることを示します。 同様に .Dv CHAR_MAX の結果は利用できない値を表記します。 .Sh 戻り値 .Fn setlocale 関数は、指定の .Fa category と .Fa locale の組み合わせが意味をなさない場合は .Dv NULL を返してロケールを変更するのに失敗します。 .Fn localeconv 関数は、後の .Fn setlocale または .Fn localeconv への呼び出しで変更される可能性のある静的オブジェクトを指す ポインタを返します。 .Sh ファイル .Bl -tag -width /usr/share/locale/locale/category -compact .It Pa $PATH_LOCALE/ Ns Em locale/category .It Pa /usr/share/locale/ Ns Em locale/category ロケール .Em locale とカテゴリ .Em category 用のロケールファイル .El .Sh 関連項目 .Xr colldef 1 , .Xr mklocale 1 , .Xr catopen 3 , .Xr ctype 3 , .Xr mbrune 3 , .Xr multibyte 3 , .Xr rune 3 , .Xr strcoll 3 , .Xr strxfrm 3 , .Xr euc 4 , .Xr utf2 4 .Sh 規格 .Fn setlocale 関数と .Fn localeconv 関数は .St -ansiC に準拠しています。 .Sh 歴史 .Fn setlocale 関数と .Fn localeconv 関数は最初に .Bx 4.4 に登場しました。 .Sh バグ 現時点では、 .Dv LC_COLLATE , .Dv LC_CTYPE および .Dv LC_TIME の各カテゴリ以外では、 .Li "\&""C"" と .Li "\&""POSIX"" ロケールだけしかサポートされていません。 .Pp .Fn localeconv における整然としない通貨サポートにも関わらず、規格は、 一般化された通貨フォーマットのための関数を組み入れていません。 .Pp われわれがリアルタイムの通貨変換機能を持つまでは、 .Dv LC_MONETARY の使用は間違った結果を導く可能性があります。 .Dv LC_NUMERIC と .Dv LC_TIME は個人的な選択肢であり、他のカテゴリでおおい隠すことはしないでください。