アプリケーションのロケール設定により、さまざまなロケールにおけるアプリケーションの動作方法が決定します。ロケール設定は、国際化されたアプリケーションを処理する場合のもっとも重要な設定です。ユーザーから見ると、ロケールはアプリケーションの動作の多くの側面に影響します。またプログラマの観点からは、システムが提供する多くのインタフェースの動作に影響します。適切に作成された国際化されたアプリケーションでは、ロケールを正しく設定する必要があります。
ロケールの詳細と、プログラムの動作に対する影響については、Oracle Solaris 11.3 国際化対応言語環境の利用ガイドを参照してください。
![]() | 注意 - setlocale(3C) マニュアルページに説明されているとおり、国際化されたインタフェースはすべて例外付きでマルチスレッドでの動作が安全です。インタフェースの分類の詳細は、Multithreaded Programming Guide の MT Interface Safety Levelsを参照してください。 |
このマニュアルで説明する関数は、ロケールに依存しています。関数の出力は処理のロケールによって異なります。
C 言語のプログラムでは、ロケールは setlocale() 関数を使用して設定されます。setlocale() 関数は、ほかの機能がロケール情報を使用できるように、プログラムの最初の方で呼び出す必要があります。
システムのロケールに関連する関数は次のとおりです。
プログラムのロケールを設定します
インストールされているロケールを問い合わせます
localelist() 呼び出しに関連付けられたメモリーを解放します
localelist() 関数は、システムにインストールされているロケールを問い合わせるために使用します。Oracle Solaris システムに追加のロケールをインストールする方法の詳細は、Oracle Solaris 11.3 国際化対応言語環境の利用ガイドを参照してください。
詳細は、setlocale(3C)、 localelist(3C)、 localelistfree(3C)、 locale_alias(5)、 langinfo.h(3HEAD)、 nl_types.h(3HEAD)、および environ(5) のマニュアルページを参照してください。
使用例 1 プログラムのロケールの設定次のコード抜粋部分は、ロケールを en_US.UTF-8 に設定する方法を示しています。
#include <locale.h> : (void) setlocale(LC_ALL, "en_US.UTF-8");
次のコード抜粋部分は、現在のロケールを問い合わせる方法を示しています。
#include <locale.h> : char *locale; : locale = setlocale(LC_ALL, NULL);
この例では、locale 変数はプログラムの現在のロケールに設定されます。
使用例 3 ユーザー環境からのロケール設定の使用次のコード抜粋部分は、ユーザー環境のロケール設定を使用するように env_locale 変数を設定する方法を示しています。
#include <locale.h> : char *env_locale; env_locale = setlocale(LC_ALL, "");
たとえば、ユーザー環境のロケールが es_ES.UTF-8 の場合、env_locale 変数は es_ES.UTF-8 に設定されます。
"/es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/de_DE.UTF-8"
この文字列には、LC_CTYPE、 LC_NUMERIC、 LC_TIME、 LC_COLLATE、 LC_MONETARY、 LC_MESSAGES というカテゴリが含まれています。この LC_MESSAGES は環境内で de_DE.UTF-8 に設定されています。
ロケールデータを取得および書式設定するための関数は次のとおりです。
数値の書式情報を取得します
言語およびロケール情報を取得します
日付と時間を文字列に変換します
文字列を時間構造に変換します
通貨値を文字列に変換します
これらの関数は、時間の書式または通貨記号など、ロケール固有のデータの問い合わせに使用されます。この関数は、時間、数値、または通貨情報を地域の表記規則に従って書式設定するためにも使用できます。詳細は、langinfo.h(3HEAD) および mktime(3C) のマニュアルページを参照してください。
使用例 4 ロケールのコードセット名の取得次のコード抜粋部分は、現在のプログラムのロケールの codeset を取得する方法を示しています。
#include <langinfo.h> : char *cs; cs = nl_langinfo(CODESET);
この例では、C ロケールの場合、cs 変数は文字列 "646" を指しています。これは US-ASCII コードセットの別名です。コードセットの詳細は、コードセットの変換を参照してください。
使用例 5 ロケールの肯定応答文字列の問い合わせ次のコード抜粋部分は、yesstr 変数を yes/no 文字列に設定する方法を示しています。これは現在のロケールの肯定応答に使用されます。
#include <langinfo.h> : char *yesstr; yesstr = nl_langinfo(YESSTR);
たとえば、es_ES.UTF-8 ロケールでは、yesstr は文字列 sí を指しています。
使用例 6 ローカル時間の出力次のコード抜粋部分は、環境に応じて設定されているロケールの地域規則に従って書式設定された現在の日付と時間を表示する方法を示しています。
#include <stdio.h> #include <locale.h> #include <time.h> : char *locale, ftime[BUFSIZ]; time_t t; locale = setlocale(LC_ALL, ""); if (locale == NULL) { /* handle error */ } if (0 != strftime(ftime, BUFSIZ, (char *)NULL, localtime(&t))) { (void) printf("%s - %s\n", locale, ftime); }