C ライブラリ関数 -setlocale()

C 標準ライブラリ - <locale.h>

説明

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;
}

上記のプログラムをコンパイルして実行すると、次の結果が得られます:

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;
}

上記のプログラムをコンパイルして実行すると、次の結果が得られます:

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プログラムは文字列、数値、通貨、日付、時刻などのローカライズ情報を正しく処理および表示できます。

C 標準ライブラリ - <locale.h>

その他の拡張