Namespaces
Variants

setlocale

From cppreference.net
ヘッダーで定義 <locale.h>
char * setlocale ( int category, const char * locale ) ;

setlocale 関数は、指定されたシステムロケールまたはその一部を新しいCロケールとして設定します。この変更は、次に setlocale が呼び出されるまで有効であり、すべてのロケール依存のCライブラリ関数の実行に影響を与えます。 locale がnullポインタの場合、 setlocale は現在のCロケールを変更せずに問い合わせます。

目次

パラメータ

category - ロケールカテゴリ識別子、 LC_xxx マクロのいずれか。nullでも可。
locale - システム固有のロケール識別子。 "" はユーザー優先ロケール、 "C" は最小ロケールを表す

戻り値

変更を適用した後のCロケールを識別するナローナル終端文字列へのポインタ、または失敗時にはヌルポインタ。

返された文字列のコピーと、この呼び出しで使用されたカテゴリは、プログラムの後続処理で setlocale を使用してロケールをこの呼び出し終了時の状態に復元するために使用される可能性があります。

注記

プログラム起動時には、ユーザーコードが実行される前に、 setlocale ( LC_ALL , "C" ) ; と同等の処理が実行されます。

戻り値の型は char * ですが、指し示す文字を変更することは未定義動作です。

setlocale はグローバル状態を変更し、ロケール依存関数の実行に影響を与えるため、一方のスレッドが以下の関数のいずれかを実行中に、別のスレッドから setlocale を呼び出すことは未定義動作となります: fprintf , isprint , iswdigit , localeconv , tolower , fscanf , ispunct , iswgraph , mblen , toupper , isalnum , isspace , iswlower , mbstowcs , towlower , isalpha , isupper , iswprint , mbtowc , towupper , isblank , iswalnum , iswpunct , setlocale , wcscoll , iscntrl , iswalpha , iswspace , strcoll , wcstod , isdigit , iswblank , iswupper , strerror , wcstombs , isgraph , iswcntrl , iswxdigit , strtod , wcsxfrm , islower , iswctype , isxdigit .

POSIXは「POSIX」というロケールも定義しており、これは常にアクセス可能で、デフォルトの最小限の「C」ロケールと完全に等価です。

POSIXはまた、返されるポインタだけでなく、指し示される文字列の内容も、後続の setlocale の呼び出しによって無効化される可能性があることを規定しています。

#include <locale.h>
#include <stdio.h>
#include <time.h>
#include <wchar.h>
int main(void)
{
    // CロケールはUTF-8対応の英語となる
    // 小数点はドイツ語形式
    // 日時フォーマットは日本語形式
    setlocale(LC_ALL, "en_US.UTF-8");
    setlocale(LC_NUMERIC, "de_DE.utf8");
    setlocale(LC_TIME, "ja_JP.utf8");
    wchar_t str[100];
    time_t t = time(NULL);
    wcsftime(str, 100, L"%A %c", localtime(&t));
    wprintf(L"Number: %.2f\nDate: %ls\n", 3.14, str);
}

出力例:

Number: 3,14
Date: 月曜日 2017年09月25日 13時00分15秒

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.11.1.1 setlocale関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.11.1.1 setlocale関数 (p: 163-164)
  • C11標準 (ISO/IEC 9899:2011):
  • 7.11.1.1 setlocale関数 (p: 224-225)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.11.1.1 setlocale関数 (p: 205-206)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.4.1.1 setlocale関数

関連項目

setlocale のロケールカテゴリ
(マクロ定数)
C++ documentation for setlocale

外部リンク

1. Windowsロケール名一覧 .
2. Linuxロケール名一覧 .