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(<ime);
_gmtime64_s(&thetime, <ime);
// 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
См. также
Ссылки
Строки имени языкового стандарта, языка и страны и региона
_create_locale, _wcreate_locale
strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
strftime, wcsftime, _strftime_l, _wcsftime_l