setlocale, _wsetlocalesetlocale, _wsetlocale

런타임 로캘을 설정하거나 가져옵니다.Sets or retrieves the run-time locale.

구문Syntax

char *setlocale(  
   int category,  
   const char *locale   
);  
wchar_t *_wsetlocale(  
   int category,  
   const wchar_t *locale   
);  

매개 변수Parameters

category
로캘의 영향을 받는 범주입니다.Category affected by locale.

locale
로캘 지정자입니다.Locale specifier.

반환 값Return Value

유효한 localecategory가 지정된 경우 지정된 localecategory와 연결된 문자열에 대한 포인터를 반환합니다.If a valid locale and category are given, returns a pointer to the string associated with the specified locale and category. locale 또는 category가 유효하지 않을 경우 null 포인터를 반환하고 프로그램의 현재 로캘 설정은 변경되지 않습니다.If the locale or category is not valid, returns a null pointer and the current locale settings of the program are not changed.

예: 호출For example, the call

setlocale( LC_ALL, "en-US" );

문자열만 반환하는 모든 범주를 설정합니다.sets all categories, returning only the string

en-US

프로그램 로캘 정보의 일부를 복원할 수 있도록 setlocale에서 반환된 문자열을 복사할 수 있습니다.You can copy the string returned by setlocale to restore that part of the program's locale information. 전역 또는 스레드 로컬 저장소는 setlocale에서 반환된 문자열에 사용됩니다.Global or thread local storage is used for the string returned by setlocale. setlocale에 대한 이후 호출이 문자열을 덮어쓰므로, 이전 호출에서 반환된 문자열 포인터가 무효화됩니다.Later calls to setlocale overwrite the string, which invalidates string pointers returned by earlier calls.

설명Remarks

setlocale 함수를 사용하여 localecategory에 의해 지정된 현재 프로그램 로캘 정보의 일부 또는 전체를 설정, 변경 또는 쿼리합니다.Use the setlocale function to set, change, or query some or all of the current program locale information specified by locale and category. locale은 프로그램의 특정 측면을 사용자 지정할 수 있는 집약성(국가/지역 및 언어)을 나타냅니다.locale refers to the locality (country/region and language) for which you can customize certain aspects of your program. 일부 로캘 종속 범주에는 날짜 형식 지정 및 통화 값의 형식 표시가 포함됩니다.Some locale-dependent categories include the formatting of dates and the display format for monetary values. locale을 컴퓨터에서 지원되는 폼이 여러 개 있는 언어의 기본 문자열로 설정하는 경우 setlocale 반환 코드를 검사하여 적용되는 언어를 확인해야 합니다.If you set locale to the default string for a language that has multiple forms supported on your computer, you should check the setlocale return value to see which language is in effect. 예를 들어, locale을 "중국어"로 설정하면 반환 값이 "중국어 간체" 또는 "중국어 번체"일 수 있습니다.For example, if you set locale to "chinese" the return value could be either "chinese-simplified" or "chinese-traditional".

_wsetlocalesetlocale의 와이드 문자 버전이고, locale 인수와 _wsetlocale의 반환 값은 와이드 문자 문자열입니다._wsetlocale is a wide-character version of setlocale; the locale argument and return value of _wsetlocale are wide-character strings. 그렇지 않으면 _wsetlocalesetlocale이 동일하게 작동합니다._wsetlocale and setlocale behave identically otherwise.

제네릭 텍스트 루틴 매핑Generic-Text Routine Mappings

TCHAR.H 루틴TCHAR.H routine _UNICODE 및 _MBCS 정의되지 않음_UNICODE & _MBCS not defined _MBCS 정의됨_MBCS defined _UNICODE 정의됨_UNICODE defined
_tsetlocale setlocale setlocale _wsetlocale

category 인수는 영향을 받는 프로그램 로캘 정보의 일부를 지정합니다.The category argument specifies the parts of a program's locale information that are affected. category에 사용되는 매크로 및 영향을 받는 프로그램의 일부는 다음과 같습니다.The macros used for category and the parts of the program they affect are as follows:

LC_ALL
다음 목록에 모든 범주가 나열됩니다.All categories in the following list.

LC_COLLATE
strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicollwcsxfrm 함수입니다.The strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicoll, and wcsxfrm functions.

LC_CTYPE
문자 처리 함수(영향을 받지 않는 isdigit, isxdigit, mbstowcsmbtowc 제외)입니다.The character-handling functions (except isdigit, isxdigit, mbstowcs, and mbtowc, which are unaffected).

LC_MONETARY
localeconv 함수에 의해 반환되는 통화 서식 정보입니다.Monetary-formatting information returned by the localeconv function.

LC_NUMERIC
서식이 지정된 출력 루틴(예: printf), 데이터 변환 루틴 및 localeconv에 의해 반환된 비통화 서식 정보에 대한 소수점 문자입니다.Decimal-point character for the formatted output routines (such as printf), for the data-conversion routines, and for the non-monetary formatting information returned by localeconv. 소수점 문자 이외에도 LC_NUMERIC은 천 단위 구분 기호와 localeconv에 의해 반환된 그룹화 제어 문자열을 설정합니다.In addition to the decimal-point character, LC_NUMERIC also sets the thousands separator and the grouping control string returned by localeconv.

LC_TIME
strftimewcsftime 함수입니다.The strftime and wcsftime functions.

이 함수는 범주 매개 변수의 유효성을 검사합니다.This function validates the category parameter. 범주 매개 변수가 이전 표에 지정된 값 중 하나가 아닌 경우 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다.If the category parameter is not one of the values given in the previous table, the invalid parameter handler is invoked, as described in Parameter Validation. 계속해서 실행하도록 허용된 경우 함수가errnoEINVAL로 설정하고 NULL을 반환합니다.If execution is allowed to continue, the function sets errno to EINVAL and returns NULL.

locale 인수는 로캘을 지정하는 문자열에 대한 포인터입니다.The locale argument is a pointer to a string that specifies the locale. locale 인수의 형식에 대한 자세한 내용은 로캘 이름, 언어 및 국가/지역 문자열을 참조하세요.For information about the format of the locale argument, see Locale Names, Languages, and Country/Region Strings. locale 이 빈 문자열 가리키면 로캘은 구현 시 정의된 네이티브 환경입니다.If locale points to an empty string, the locale is the implementation-defined native environment. C의 값은 C 번역에 대한 최소 ANSI 표준에 맞는 환경을 지정합니다.A value of C specifies the minimal ANSI conforming environment for C translation. C로캘은 char 데이터 형식이 1바이트이고 해당 값이 항상 256보다 작은 것으로 가정합니다.The C locale assumes that all char data types are 1 byte and that their value is always less than 256.

프로그램을 시작할 때 다음 문을 실행합니다.At program startup, the equivalent of the following statement is executed:

setlocale( LC_ALL, "C" );

locale 인수는 로캘 이름, 언어 문자열, 언어 문자열 및 국가/지역 코드, 코드 페이지, 언어 문자열, 국가/지역 코드 및 코드 페이지를 가져올 수 있습니다.The locale argument can take a locale name, a language string, a language string and country/region code, a code page, or a language string, country/region code, and code page. 사용 가능한 로캘 이름, 언어, 국가/지역 코드 및 코드 페이지의 집합에는 문자당 2바이트 이상을 필요로 하는 코드 페이지를 제외하고, Windows NLS API에서 지원하는 모든 항목이 포함됩니다(예: UTF-7 및 UTF-8).The set of available locale names, languages, country/region codes, and code pages includes all those supported by the Windows NLS API except code pages that require more than two bytes per character, such as UTF-7 and UTF-8. UTF-7 또는 UTF-8의 코드 페이지 값을 제공하는 경우 setlocale이 실패하고 NULL이 반환됩니다.If you provide a code page value of UTF-7 or UTF-8, setlocale will fail, returning NULL. setlocale에서 지원하는 로캘 이름 집합은 로캘 이름, 언어 및 국가/지역 문자열에 설명되어 있습니다.The set of locale names supported by setlocale are described in Locale Names, Languages, and Country/Region Strings. setlocale에서 지원하는 언어 및 국가/지역 문자열 집합은 언어 문자열국가/지역 문자열에 나열되어 있습니다.The set of language and country/region strings supported by setlocale are listed in Language Strings and Country/Region Strings. 코드에 포함되거나 저장소에 직렬화된 로캘 문자열의 성능과 유지 관리를 위해 로캘 이름 형식을 사용하는 것이 좋습니다.We recommend the locale name form for performance and for maintainability of locale strings embedded in code or serialized to storage. 로캘 이름 문자열은 언어와 국가/지역 이름 형식보다 운영 체제 업데이트에 의해 변경될 가능성이 적습니다.The locale name strings are less likely to be changed by an operating system update than the language and country/region name form.

locale 인수로 전달되는 null 포인터는 setlocale가 국제 환경을 설정하는 대신 쿼리하도록 지정합니다.A null pointer that's passed as the locale argument tells setlocale to query instead of to set the international environment. locale 인수가 null 포인터인 경우 프로그램의 현재 로캘 설정은 변경되지 않습니다.If the locale argument is a null pointer, the program's current locale setting is not changed. 대신 setlocale은 스레드의 현재 로캘인 category와 연결된 문자열에 대한 포인터를 반환합니다.Instead, setlocale returns a pointer to the string that's associated with the category of the thread's current locale. category 인수가 LC_ALL인 경우 함수가 세미콜론으로 구분된 각각의 범주의 현재 설정을 나타내는 문자열을 반환합니다.If the category argument is LC_ALL, the function returns a string that indicates the current setting of each category, separated by semicolons. 예: 호출 시퀀스For example, the sequence of calls

// Set all categories and return "en-US"

setlocale(LC_ALL, "en-US");

// Set only the LC_MONETARY category and return "fr-FR"

setlocale(LC_MONETARY, "fr-FR");

printf("%s\n", setlocale(LC_ALL, NULL));

returnsreturns

LC_COLLATE=en-US;LC_CTYPE=en-US;LC_MONETARY=fr-FR;LC_NUMERIC=en-US;LC_TIME=en-US

LC_ALL 범주와 연결된 문자열입니다.which is the string that's associated with the LC_ALL category.

다음 예제는 LC_ALL 범주와 관련이 있습니다.The following examples pertain to the LC_ALL category. 사용자 기본 OEM 코드 페이지 및 사용자 기본 ANSI 코드 페이지의 사용을 각각 지정하기 위해 코드 페이지 번호 대신 ".OCP" 및 ".ACP" 문자열을 사용할 수 있습니다.Either of the strings ".OCP" and ".ACP" can be used instead of a code page number to specify use of the user-default OEM code page and user-default ANSI code page, respectively.

setlocale( LC_ALL, "" );
로캘을 운영 체제에서 가져온 사용자 기본 ANSI 코드 페이지인 기본값으로 설정합니다.Sets the locale to the default, which is the user-default ANSI code page obtained from the operating system.

setlocale( LC_ALL, ".OCP" );
로캘을 운영 체제에서 얻은 현재 OEM 코드 페이지로 명시적으로 설정합니다.Explicitly sets the locale to the current OEM code page obtained from the operating system.

setlocale( LC_ALL, ".ACP" );
로캘을 운영 체제에서 얻은 ANSI 코드 페이지로 설정합니다.Sets the locale to the ANSI code page obtained from the operating system.

setlocale( LC_ALL, "<localename>" );
로캘을 <localename>에 의해 표시되는 로캘 이름으로 설정합니다.Sets the locale to the locale name that's indicated by <localename>.

setlocale( LC_ALL, "<language>_<country>" );
호스트 운영 체제에서 가져온 기본 코드 페이지와 함께 로캘을 <language><country>에 의해 표시되는 언어 및 국가/지역으로 설정합니다.Sets the locale to the language and country/region indicated by <language> and <country>, together with the default code page obtained from the host operating system.

setlocale( LC_ALL, "<language>_<country>.<code_page>" );
로캘을 <language>, <country><code_page> 문자열에 의해 표시되는 언어, 국가/지역 및 코드 페이지로 설정합니다.Sets the locale to the language, country/region, and code page indicated by the <language>, <country>, and <code_page> strings. 언어, 국가/지역 및 코드 페이지의 다양한 조합을 사용할 수 있습니다.You can use various combinations of language, country/region, and code page. 예를 들어, 이 호출은 코드 페이지 1252에 따라 로캘을 프랑스어(캐나다)로 설정합니다.For example, this call sets the locale to French Canada with code page 1252:

setlocale( LC_ALL, "French_Canada.1252" );

이 호출은 기본 ANSI 코드 페이지에 따라 로캘을 프랑스어(캐나다)로 설정합니다.This call sets the locale to French Canada with the default ANSI code page:

setlocale( LC_ALL, "French_Canada.ACP" );

이 호출은 기본 OEM 코드 페이지에 따라 로캘을 프랑스어(캐나다)로 설정합니다.This call sets the locale to French Canada with the default OEM code page:

setlocale( LC_ALL, "French_Canada.OCP" );

setlocale( LC_ALL, "<language>" );
로캘을 <language>에 의해 표시되는 언어로 설정하고 호스트 운영 체제에서 가져온 대로 지정된 언어 및 사용자 기본 ANSI 코드 페이지와 지정된 언어를 위한 기본 국가/지역을 사용합니다.Sets the locale to the language that's indicated by <language>, and uses the default country/region for the specified language and the user-default ANSI code page for that country/region as obtained from the host operating system. 예를 들어, setlocale에 대한 다음 호출은 기능적으로 동일합니다.For example, the following calls to setlocale are functionally equivalent:

setlocale( LC_ALL, "en-US" );

setlocale( LC_ALL, "English" );

setlocale( LC_ALL, "English_United States.1252" );

성능 및 유지 관리에 첫 번째 폼을 사용하는 것이 좋습니다.We recommend the first form for performance and maintainability.

setlocale( LC_ALL, ".<code_page>" );
지정한 코드 페이지에 대한 기본 국가/지역 및 언어(호스트 운영 체제에 의해 정의됨)와 함께 <code_page>에 의해 표시되는 값으로 코드 페이지를 설정합니다.Sets the code page to the value indicated by <code_page>, together with the default country/region and language (as defined by the host operating system) for the specified code page.

코드 페이지에 변경 내용을 적용하려면 범주가 LC_ALL 또는 LC_CTYPE이어야 합니다.The category must be either LC_ALL or LC_CTYPE to effect a change of code page. 예를 들어, 기본 국가/지역 및 호스트 운영 체제의 언어가 "미국" 및 "영어"인 경우 setlocale에 대한 다음 두 호출이 기능적으로 동일합니다.For example, if the default country/region and language of the host operating system are "United States" and "English," the following two calls to setlocale are functionally equivalent:

setlocale( LC_ALL, ".1252" );

setlocale( LC_ALL, "English_United States.1252");

자세한 내용은 C/C++ 전처리기 참조에서 setlocale pragma 지시문을 참조하세요.For more information, see the setlocale pragma directive in the C/C++ Preprocessor Reference.

_configthreadlocale 함수는 setlocale가 프로그램의 모든 스레드 로캘 또는 호출 스레드의 로캘에 영향을 주는지 아닌지를 제어하기 위해 사용됩니다.The function _configthreadlocale is used to control whether setlocale affects the locale of all threads in a program or only the locale of the calling thread.

요구 사항Requirements

루틴에서 반환된 값Routine 필수 헤더Required header
setlocale <locale.h><locale.h>
_wsetlocale <locale.h> 또는 <wchar.h><locale.h> or <wchar.h>

호환성에 대한 자세한 내용은 소개 단원의 호환성 부분을 참조하십시오.For additional compatibility information, see Compatibility in the Introduction.

Example

// crt_setlocale.c  
//   
// This program demonstrates the use of setlocale when  
// using two independent threads.  
//  

#include <locale.h>  
#include <process.h>  
#include <windows.h>  
#include <stdio.h>  
#include <time.h>  

#define BUFF_SIZE 100  

// Retrieve the date in the current  
// locale's format.  
int get_date(unsigned char* str)  
{  
    __time64_t ltime;  
    struct tm  thetime;  

    // Retrieve the current time  
    _time64(&ltime);  
    _gmtime64_s(&thetime, &ltime);  

    // Format the current time structure into a string  
    // "%#x" is the long date representation in the  
    // current locale  
    if (!strftime((char *)str, BUFF_SIZE, "%#x",   
                  (const struct tm *)&thetime))  
    {  
        printf("strftime failed!\n");  
        return -1;  
    }  
    return 0;  
}  

// This thread sets its locale to the argument  
// and prints the date.  
uintptr_t __stdcall SecondThreadFunc( void* pArguments )  
{  
    unsigned char str[BUFF_SIZE];  
    char * locale = (char *)pArguments;  

    // Set the thread locale  
    printf("The thread locale is now set to %s.\n",  
           setlocale(LC_ALL, locale));  

    // Retrieve the date string from the helper function  
    if (get_date(str) == 0)  
    {  
        printf("The date in %s locale is: '%s'\n", locale, str);  
    }  

    _endthreadex( 0 );  
    return 0;  
}   

// The main thread sets the locale to English   
// and then spawns a second thread (above) and prints the date.  
int main()  
{   
    HANDLE          hThread;  
    unsigned        threadID;  
    unsigned char   str[BUFF_SIZE];  

    // Configure per-thread locale to cause all subsequently created   
    // threads to have their own locale.  
    _configthreadlocale(_ENABLE_PER_THREAD_LOCALE);  

    // Set the locale of the main thread to US English.  
    printf("The thread locale is now set to %s.\n",  
           setlocale(LC_ALL, "en-US"));  

    // Create the second thread with a German locale.  
    // Our thread function takes an argument of the locale to use.  
    hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc,  
                                      "de-DE", 0, &threadID );  

    if (get_date(str) == 0)  
    {  
        // Retrieve the date string from the helper function  
        printf("The date in en-US locale is: '%s'\n\n", str);  
    }  

    // Wait for the created thread to finish.  
    WaitForSingleObject( hThread, INFINITE );  

    // Destroy the thread object.  
    CloseHandle( hThread );  
}  
The thread locale is now set to en-US.  
The time in en-US locale is: 'Wednesday, May 12, 2004'  

The thread locale is now set to de-DE.  
The time in de-DE locale is: 'Mittwoch, 12. Mai 2004'  

참고 항목See Also

로캘 이름, 언어 및 국가/지역 문자열 Locale Names, Languages, and Country/Region Strings
_configthreadlocale _configthreadlocale
_create_locale, _wcreate_locale _create_locale, _wcreate_locale
로캘 Locale
localeconv localeconv
_mbclen, mblen, _mblen_l _mbclen, mblen, _mblen_l
strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
mbstowcs, _mbstowcs_l mbstowcs, _mbstowcs_l
mbtowc, _mbtowc_l mbtowc, _mbtowc_l
_setmbcp _setmbcp
strcoll 함수 strcoll Functions
strftime, wcsftime, _strftime_l, _wcsftime_l strftime, wcsftime, _strftime_l, _wcsftime_l
strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l
wcstombs, _wcstombs_l wcstombs, _wcstombs_l
wctomb, _wctomb_lwctomb, _wctomb_l