## 3.1 C 言語でのロケール

先の節で説明した文化や言語の依存関係は、オペレーティングシステムレベルで実現する必要があります。一般には、これをロケールという言語テーブルで実現します。

X/Open コンソーシアムでは、プログラミング言語 C から使用する Native Language Support (NLS) のさまざまなサービスを 規格化しています。この規格を一般には XPG4 と呼びます。国際化サービスは、地域対応サービスと共に X/Open の Native Language Support に組み込まれています。以下の節では、この規格に基づいて説明します。

XPG4 によれば、C 言語でのロケールは、表 2に示すカテゴリから構成されています。

#### 表 2 -- C 言語でのロケールのカテゴリ

カテゴリ | 内容
--- | ---
`LC_NUMERIC` | 数字の規則と記号
`LC_TIME` | 日付と時間情報の値
`LC_MONETARY` | 通貨情報の規則と記号
`LC_CTYPE` | 文字分類と大文字、小文字の変換
`LC_COLLATE` | 照合順序
`LC_MESSAGES` | メッセージの書式と値

UNIX では通常、C 言語でのロケールの外部表現をファイルとして扱います。実装方法はオペレーティングシステムによって異なります。以下の図 4に示すように、setlocale() という関数を呼び出すと、外部実装は内部のメモリの実装に変換されます。

#### 図 4 -- C 言語でのロケールの外部実装から内部実装への変換

プログラム内では、C 言語でのロケールは 1 つ以上の大域データ構造で表します。C ライブラリは、この大域データ構造の情報を利用して、ローカルな取り決めに基づいて動作する関数セットを提供します。関数と対応する情報の例を表 3に示します。

#### 表 3 -- C 言語でのロケール関数と対応する情報

C 言語でのロケール関数 | 対応する情報
--- | ---
setlocale`(),` ... | ロケールの初期設定と言語情報
isalpha(), isupper(), isdigit(), ... | 文字分類
strftime(), ... | 日付関数と時間関数
strfmon() | 通貨関数
printf(), scanf(), ... | 数字の構文解析と書式
strcoll(), wcscoll(), ... | 文字列の照合
mblen(), mbtowc(), wctomb(), ... | 複数バイト関数
catopen(), catgets(), catclose() | メッセージ検索

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。

OEM リリース, 1998 年 6 月