Поделиться через


setlocale, _wsetlocale

Извлекает набор или времени выполнения языковой стандарт.

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

Параметры

  • category
    Категория повлиянная на языкового стандарта.

  • locale
    Описатель языкового стандарта.

Возвращаемое значение

Если допустимый объект locale и category заданы, возвращает указатель на строку, связанной с указанным locale и category.Если locale или category, возвращает недопустимый указатель и не изменяются текущие параметры языкового стандарта программы.

Например, вызов

setlocale( LC_ALL, "en-US" );

задает все категории, возвращая только строка

en-US

Можно использовать указатель строки, возвращаемый методом setlocale в последующих вызовах для восстановления эта часть данных о языковом стандарте программы, высказывать программа не изменяет указатель или строку.Последующие вызовы setlocale перезапись строку, которая предоставляет указатели строк не возвращающие более предыдущими вызовами больше не допустимым.Функцию _strdup можно использовать для сохранения копии определенной строки языкового стандарта.

Заметки

Используйте функцию setlocale для задания, изменять запрос или некоторые или все сведения о языковом стандарте текущей программы, locale и category.locale - это расположение (стране или области и языку), для которого можно настраивать некоторые аспекты программы.К некоторым категориям, зависящим от языкового стандарта, относится формат дат и отображения денежных значений.Если свойству locale задано значение строки по умолчанию для языка с нескольких формы, поддерживаемые на компьютере, необходимо проверить код возврата setlocale, чтобы определить, какой язык действует.Например, использование "набор" может привести к в возвращаемом значении chinese-simplified или chinese-traditional.

версия _wsetlocale является setlocale; аргумент locale и возвращаемое значение _wsetlocale характерные черты.В остальных случаях поведение _wsetlocale и setlocale идентично.

Универсальное текстовое сопоставление функций

Функция TCHAR.H

неопределенные _UNICODE & _MBCS

определенные _MBCS

Определение _UNICODE

_tsetlocale

setlocale

setlocale

_wsetlocale

Аргумент category указывает часть данных о языковом стандарте программы, иначе.Макросы, используемые для части программы category и их влияние на следующим образом:

  • LC_ALL
    Все категории, как показано ниже.

  • LC_COLLATE
    strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicoll и wcsxfrm.

  • LC_CTYPE
    Символ- обработки функции (за исключением isdigit, isxdigit, mbstowcs и mbtowc, которые не затрагиваются).

  • LC_MONETARY
    Данные Монетн- форматирования, возвращаемых функцией localeconv.

  • LC_NUMERIC
    Символ десятичной запятой для процедур форматированные выходные данные (например, printf), процедуры преобразования данных, а не для монетного сведения о форматировании, возвращаемого localeconv. Помимо символу десятичной запятой, LC_NUMERIC также задает разделитель тысяч и строку элемента управления возвращенными команды localeconv.

  • LC_TIME
    Функции strftime и wcsftime.

Эта функция проверяет параметр категории.Если параметр категории не является одним из значений уступанных вышеуказанная таблица, то обработчик вызывается недопустимого параметра, как описано в разделе Проверка параметров.Если среда выполнения может продолжить, функция задает для errno значение EINVAL и возвращает NULL.

Аргумент locale является указателем на строку, которая задает языковой стандарт.Дополнительные сведения о формате аргумента locale см. в разделе Строки имени языкового стандарта, языка и страны и региона.Если locale указывает на пустой строке, то языковой стандарт предоставления определенной конкретной среды.Значение C задает минимальную среду ANSI подходящей для перевода C.Языковой стандарт C высказывать все типы данных char 1 байт, то их значение всегда меньше 256.

При запуске программы, выполняется эквивалент следующей выписки:

setlocale( LC_ALL, "C" );

Аргумент locale может принимать имя языкового стандарта, строковую переменную с названием языка, строковую переменную с названием языка и код страны, кодовую страницу, или строковую переменную с названием языка, код страны и кодовую страницу.Набор доступных имен языкового стандарта, кодов языков, страны и кодовых страниц, включает все поддерживаемые API многоязыковой поддержки Windows, кроме кодовых страниц, требующие более 2 байт на один знак, например UTF-7 и UTF-8.Если указать кодовую страницу или UTF-7 как UTF-8, setlocale завершится ошибкой, возвращая значение NULL.Набор имен языкового стандарта, поддерживаемых setlocale содержится в Строки имени языкового стандарта, языка и страны и региона.Набор строк языка и страны, поддерживаемых setlocale представлен в разделе Строки языка и Строки страны или региона.

Указатель, тогда как аргумент locale указывает setlocale для запроса, а не установил эти условия.Если аргумент locale указатель, не изменен параметр программы текущего языкового стандарта.Вместо этого setlocale возвращает указатель на строке category, связанной с языкового стандарта текущего потока.Если аргумент categoryLC_ALL, функция возвращает строку, указывающее текущий параметр каждой из категорий, разделенных точками с запятой.Например, последовательность вызовов

// 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));

returns

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

строка, связанная с категорией LC_ALL.

Следующие примеры относятся к категории LC_ALL.Каждый из строк ".OCP" и ".ACP" можно использовать вместо номера кодовой страницы для определения использование кодовой страницы кодовой страницы OEM пользователем по умолчанию и ANSI пользователя по умолчанию соответственно.

  • setlocale( LC_ALL, "" );
    Задает языковой стандарт по умолчанию, которое кодовая страница ANSI пользователя по умолчанию полученная от операционной системы.

  • setlocale( LC_ALL, ".OCP" );
    Явно задает языковой стандарт в текущую кодовую страницу OEM полученной от операционной системы.

  • setlocale( LC_ALL, ".ACP" );
    Задает языковой стандарт в кодовую страницу ANSI, полученной от операционной системы.

  • setlocale( LC_ALL, "<localename>" );
    Устанавливает языковой стандарт, к имени языкового стандарта бы <localename>.

  • setlocale( LC_ALL, "<language>_<country>" );
    Задает языковой стандарт по языку и стране или отображаемой области <language> и <country>, используя страницу кода по умолчанию полученную от операционной системы сервера виртуальных машин.

  • setlocale( LC_ALL, "<language>_<country>.<code_page>" );
    Задает языковой стандарт для языка, стране или областей и кодовую страницу, отображаемого на <language>, <country> и <code_page> строками.Можно сочетания из языка, страна/регион, а кодовая страница использовать разные.Например:

    setlocale( LC_ALL, "French_Canada.1252" );
    // Set code page to French Canada ANSI default
    setlocale( LC_ALL, "French_Canada.ACP" );
    // Set code page to French Canada OEM default
    setlocale( LC_ALL, "French_Canada.OCP" );
    
  • setlocale( LC_ALL, "<language>" );
    Задает языковой стандарт, приведенному в языке <language>, используя страну или область по умолчанию для определенного языка и кодовую страницу ANSI пользователя по умолчанию для этих страны, полученного от операционной системы сервера виртуальных машин.Например, следующие вызовы setlocale функционально эквивалентны:

    setlocale( LC_ALL, "en-US" );
    setlocale( LC_ALL, "English" );
    setlocale( LC_ALL, "English_United States.1252" );
    
  • setlocale( LC_ALL, ".<code_page>" );
    Задает кодовую страницу, приведенному в значение <code_page>, используя страну или область по умолчанию и язык (как указано в операционной системе сервера виртуальных машин) для конкретной кодовой страницы.

Категория должна быть LC_ALL или LC_CTYPE к эффекту изменение кодовой страницы.Например, если страна/регион и язык по умолчанию операционной системы сервера виртуальных машин "Соединенные Штаты" и "английский, следующие 2" вызова setlocale функционально эквивалентны:

setlocale( LC_ALL, ".1252" );

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

Дополнительные сведения см. в разделе директива pragma setlocale в справочнике препроцессора.

Функция The _configthreadlocale используется в элемент управления влияет на ли setlocale языковой стандарт всех потоков в программе или только языковой стандарт вызывающего потока.

Требования

Функция

Требуемый заголовок

setlocale

<locale.h>

_wsetlocale

<locale.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Пример

// crt_setlocale.cpp
// 
// 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 and time in the current
// locale's format.
int get_time(unsigned char* str)
{
    __time64_t ltime;
    struct tm  thetime;

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

    // Format the current time structure into a string
    // using %#x is the long date representation,
    // appropriate to 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 German
// and prints the time.
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
    unsigned char str[BUFF_SIZE];

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

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

    _endthreadex( 0 );
    return 0;
} 

// The main thread spawns a second thread (above) and then
// sets the locale to English and prints the time.
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);

    // Retrieve the time string from the helper function
    printf("The thread locale is now set to %s.\n",
           setlocale(LC_ALL, "en-US"));

    // Create the second thread.
    hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc,
                                      NULL, 0, &threadID );

    if (get_time(str) == 0)
    {
        // Retrieve the time string from the helper function
        printf("The time 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 );
}
  
  
  
  

Эквивалент в .NET Framework

Класс System::Globalization::CultureInfo

См. также

Ссылки

Строки имени языкового стандарта, языка и страны и региона

_configthreadlocale

_create_locale, _wcreate_locale

Языковой стандарт

localeconv

_mbclen, mblen, _mblen_l

strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

mbstowcs, _mbstowcs_l

mbtowc, _mbtowc_l

_setmbcp

функции strcoll

strftime, wcsftime, _strftime_l, _wcsftime_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l