日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
setlocale |
category および locale 引数によって指定された,プログラムのロケールの該当部分を選択します。この関数を使用すると, 1 つのカテゴリ,またはプログラムのカレント・ロケール全体を変更または照会することができます。
#include <locale.h>char *setlocale (int category, const char *locale);
category
カテゴリの名前。ロケール全体を変更または照会するには, LC_ALL を指定します。その他の有効なカテゴリ名は以下のとおりです。
- LC_COLLATE
- LC_CTYPE
- LC_MESSAGES
- LC_MONETARY
- LC_NUMERIC
- LC_TIME
locale
ロケールを指定する文字列へのポインタ。
setlocale関数は, category および locale 引数によって指定された,プログラムのロケールの該当部分を設定または照会します。 category 引数として LC_ALL を指定すると,ロケール全体が指定されます。その他の値を指定すると,プログラムのロケールの一部のみが指定されます。locale 引数は,使用するロケールを識別する文字列をポイントします。この引数は以下のいずれかです。
- パブリック・ロケールの名前
次の形式でパブリック・ロケールを指定します。
language_country.codeset[@modifier]
関数は,論理名 SYS$I18N_LOCALE によって定義された位置で,パブリック・ロケール・バイナリ・ファイルを探します。ファイル・タイプのデフォルトは. LOCALE です。名前の中のピリオド (.) とアットマーク (@) 文字は,下線 (_) に置き換えられます。
たとえば,指定された名前が "zh_CN.dechanzi@radical" だった場合,関数は SYS$I18N_LOCALE:ZH_CN_DECHANZI_RADICAL.LOCALE バイナリ・ロケール・ファイルを探します。- ファイル指定
バイナリ・ロケール・ファイルを指定します。任意の有効なファイル指定を使用することができます。デバイスまたはディレクトリが省略された場合,関数は現在の呼び出し元デバイスとディレクトリを,省略されたコンポーネントのデフォルト値として使用します。ファイルが見つからなかった場合,関数は SYS$I18N_LOCALE 論理名によって定義されたデバイスとディレクトリをデフォルト値として適用します。ファイル・タイプのデフォルト値は .LOCALE です。
ワイルドカードは使用できません。バイナリ・ロケール・ファイルはリモート・ノード上には存在できません。- "C"
C ロケールを指定します。プログラムが setlocaleを呼び出さない場合には, C ロケールがデフォルトとなります。- "POSIX"
C ロケールと同じです。- ""
ロケールが国際環境論理名の設定をもとに初期化されることを指定します。関数は,定義されている論理名を発見するまで,次の順序で論理名をチェックします。
- LC_ALL
- カテゴリに対応する論理名。たとえば,カテゴリとして LC_NUMERIC が指定されている場合, setlocaleがチェックする最初の論理名は LC_NUMERIC となる。
- LANG
- SYS$LC_ALL
- SYS$LC_* 論理名によって定義される,カテゴリのシステム・デフォルト。たとえば,LC_NUMERIC カテゴリのデフォルトは, SYS$LC_NUMERIC 論理名によって定義される。
- SYS$LANG
どの論理名も定義されていなければ,デフォルトでは C ロケールが使用されます。 SYS$LC_* 論理名は,システムのスタートアップ時にセットアップされます。
locale 引数と同様に,国際環境論理名の等価名は,パブリック・ロケールの名前か,ファイル指定となります。 setlocale関数はこの等価名を, locale 引数で指定されたかのように扱います。- NULL
setlocaleにカレント・ロケールを照会させます。関数は,プログラムのロケールの category に関連付けられた部分を記述する文字列へのポインタを返します。 LC_ALL カテゴリを指定すると,ロケール全体を記述する文字列が返されます。ロケールの変更は行われません。- 前の setlocaleの呼び出しから返された文字列
関数は,プログラムのロケールの category に関連付けられた部分を復元します。文字列がロケール全体の記述を含んでいる場合には,文字列の category に対応する部分が使用されます。文字列がプログラムのロケールのうちの 1 つのカテゴリの部分を記述している場合には,そのロケールが使用されます。つまり,たとえば LC_COLLATE カテゴリを指定した setlocale呼び出しから返された文字列を使って, LC_MESSAGES カテゴリに同じロケールを設定することができます。
指定されたロケールが使用可能である場合, setlocaleは,プログラムのロケールの category に関連付けられた部分を記述する文字列へのポインタを返します。LC_ALL カテゴリでは,返される文字列はプログラムのロケール全体を記述します。エラーが発生した場合には,NULL ポインタが返され,プログラムのロケールは変更されません。
setlocaleへのそれ以降の呼び出しは,返された文字列を上書きします。ロケールのその部分を復元する必要がある場合には,プログラム内で文字列を保存しておくようにしてください。呼び出し元のプログラムは,返される文字列の形式または長さに関する仮定を行うべきではありません。
x ロケールを記述する文字列へのポインタ。 NULL エラーが発生したことを示します。 errno が設定されます。
#include <errno.h> #include <stdio.h> #include <locale.h> /* This program calls setlocale() three times. The second call */ /* is for a nonexistent locale. The third call is for an */ /* existing file that is not a locale file. */ main() { char *ret_str; errno = 0; printf("setlocale (LC_ALL, \"POSIX\")"); ret_str = (char *) setlocale(LC_ALL, "POSIX"); if (ret_str == NULL) perror("setlocale error"); else printf(" call was successful\n"); errno = 0; printf("\n\nsetlocale (LC_ALL, \"junk.junk_codeset\")"); ret_str = (char *) setlocale(LC_ALL, "junk.junk_codeset"); if (ret_str == NULL) perror(" returned error"); else printf(" call was successful\n"); errno = 0; printf("\n\nsetlocale (LC_ALL, \"sys$login:login.com\")"); ret_str = (char *) setlocale(LC_ALL, "sys$login:login.com"); if (ret_str == NULL) perror(" returned error"); else printf(" call was successful\n"); }
この例のプログラムを実行すると,次の結果が生成されます。
setlocale (LC_ALL, "POSIX") call was successful setlocale (LC_ALL, "junk.junk_codeset") returned error: no such file or directory setlocale (LC_ALL, "sys$login:login.com") returned error: nontranslatable vms error code: 0x35C07C %c-f-localebad, not a locale file
目次 | 索引 |
|