C ライブラリ関数 -setlocale()
説明
setlocaleは C 標準ライブラリ<locale.h>内の関数であり、プログラムのローカライズ情報を設定または照会します。これにより、プログラマは文字分類、文字変換、通貨形式、日付と時刻の形式、数値形式などに使用されるロケールを指定できます。
宣言
以下は setlocale() 関数の宣言です。
#include <locale.h> char *setlocale(int category, const char *locale);
パラメータ
-
category:設定または照会するローカライズカテゴリを指定します。次のマクロのいずれかを使用できます:LC_ALL:すべてのローカライズカテゴリを設定または照会します。LC_COLLATE:文字列比較のローカライズ情報を設定または照会します。LC_CTYPE:文字処理のローカライズ情報を設定または照会します。LC_MONETARY:通貨形式のローカライズ情報を設定または照会します。LC_NUMERIC:数値形式のローカライズ情報を設定または照会します。LC_TIME:時刻形式のローカライズ情報を設定または照会します。
-
locale:設定するローカライズ情報を指定します。次のいずれかを使用できます:"":ユーザー環境変数のデフォルト設定に設定します。NULL:現在のローカライズ情報を照会します。具体的なロケール名:例:"en_US.UTF-8" のように、特定のロケールを設定するために使用します。
戻り値
- もし locale が NULL ならば、
localeためにNULL現在のロケール情報文字列へのポインタを返します。 - もし locale が NULL でなく、
locale非NULL設定に成功した場合は、そのロケール情報文字列へのポインタを返します。 - もし locale が NULL でなく、
locale非NULL設定に失敗した場合は、NULL を返します。NULL。
例
以下は setlocale を使用したサンプルコードで、ローカライズ情報の設定と照会の方法を示しています。
ローカライズ情報の設定と照会:
例
#include <stdio.h>
#include <locale.h>
int main() {
// 現在のローカライズ情報を照会する
printf("Default locale: %s\n", setlocale(LC_ALL, NULL));
// ローカライズ情報をユーザー環境変数のデフォルト設定に設定する
setlocale(LC_ALL, "");
// 現在のローカライズ情報を取得して出力する
printf("Locale after setting to '': %s\n", setlocale(LC_ALL, NULL));
// ローカライズ情報を "en_US.UTF-8" に設定する
if (setlocale(LC_ALL, "en_US.UTF-8") != NULL) {
printf("Locale after setting to 'en_US.UTF-8': %s\n", setlocale(LC_ALL, NULL));
} else {
printf("Unable to set locale to 'en_US.UTF-8'\n");
}
return 0;
}
#include <locale.h>
int main() {
// 現在のローカライズ情報を照会する
printf("Default locale: %s\n", setlocale(LC_ALL, NULL));
// ローカライズ情報をユーザー環境変数のデフォルト設定に設定する
setlocale(LC_ALL, "");
// 現在のローカライズ情報を取得して出力する
printf("Locale after setting to '': %s\n", setlocale(LC_ALL, NULL));
// ローカライズ情報を "en_US.UTF-8" に設定する
if (setlocale(LC_ALL, "en_US.UTF-8") != NULL) {
printf("Locale after setting to 'en_US.UTF-8': %s\n", setlocale(LC_ALL, NULL));
} else {
printf("Unable to set locale to 'en_US.UTF-8'\n");
}
return 0;
}
上記のプログラムをコンパイルして実行すると、次の結果が得られます:
Default locale: C Locale after setting to '': zh_CN.UTF-8 Locale after setting to 'en_US.UTF-8': en_US.UTF-8
ローカライズ情報に基づいて数値をフォーマットする:
例
#include <stdio.h>
#include <locale.h>
int main() {
// ローカライズ情報をユーザー環境変数のデフォルト設定に設定する
setlocale(LC_NUMERIC, "");
// ローカライズされた浮動小数点数を出力する
printf("Formatted number: %'.2f\n", 1234567.89);
// ローカライズ情報を "de_DE.UTF-8"(ドイツ語 - ドイツ)に設定する
if (setlocale(LC_NUMERIC, "de_DE.UTF-8") != NULL) {
printf("Locale after setting to 'de_DE.UTF-8': %s\n", setlocale(LC_NUMERIC, NULL));
printf("Formatted number in German locale: %'.2f\n", 1234567.89);
} else {
printf("Unable to set locale to 'de_DE.UTF-8'\n");
}
return 0;
}
#include <locale.h>
int main() {
// ローカライズ情報をユーザー環境変数のデフォルト設定に設定する
setlocale(LC_NUMERIC, "");
// ローカライズされた浮動小数点数を出力する
printf("Formatted number: %'.2f\n", 1234567.89);
// ローカライズ情報を "de_DE.UTF-8"(ドイツ語 - ドイツ)に設定する
if (setlocale(LC_NUMERIC, "de_DE.UTF-8") != NULL) {
printf("Locale after setting to 'de_DE.UTF-8': %s\n", setlocale(LC_NUMERIC, NULL));
printf("Formatted number in German locale: %'.2f\n", 1234567.89);
} else {
printf("Unable to set locale to 'de_DE.UTF-8'\n");
}
return 0;
}
上記のプログラムをコンパイルして実行すると、次の結果が得られます:
Formatted number: 1,234,567.89 Locale after setting to 'de_DE.UTF-8': de_DE.UTF-8 Formatted number in German locale: 1234567,89
詳細な説明
1. ローカライズ情報の設定と照会
- プログラムの開始時に、以下を使用して、
setlocale(LC_ALL, "");プログラムのローカライズ情報をユーザー環境変数のデフォルト設定に設定できます。ユーザー環境変数は通常、OSまたはユーザーによって設定され、プログラムの実行時に使用するデフォルトのロケールを指定します。 - 以下を使用できます。
setlocale(LC_ALL, "en_US.UTF-8");または他のロケール文字列を使用して、特定のロケールを設定します。 - 以下を使用して、
setlocale(LC_ALL, NULL);現在のローカライズ情報を照会し、現在のロケールを説明する文字列を返します。
2. ローカライズカテゴリ
各カテゴリはプログラムの特定の側面を制御します:
LC_COLLATE:文字列比較関数に影響します(例:strcollとstrxfrm)。LC_CTYPE:文字分類および変換関数に影響します(例:isalphaとtoupper)。LC_MONETARY:通貨形式に関連する関数に影響します(例:localeconv)。LC_NUMERIC:数値形式に影響します(例:小数点と桁区切り記号)。LC_TIME:日付と時刻の形式に影響します(例:strftime)。
まとめ
setlocalesetlocale() 関数は、プログラムのローカライズ情報を設定および照会するための重要なツールです。プログラムが異なる言語や文化的習慣に適応できるようにし、国際化とローカライゼーションを実現します。これを使用することにより、setlocaleプログラムは文字列、数値、通貨、日付、時刻などのローカライズ情報を正しく処理および表示できます。