_create_locale, _wcreate_locale

Создает объект языкового стандарта.

Синтаксис

_locale_t _create_locale(
   int category,
   const char *locale
);
_locale_t _wcreate_locale(
   int category,
   const wchar_t *locale
);

Параметры

category
Категория.

locale
Указатель языкового стандарта.

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

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

Замечания

Функция _create_locale позволяет создать объект, представляющий определенные параметры конкретного региона, для использования в локальных версиях многих функций CRT (функций с суффиксом _l). Она ведет себя так же, как setlocale, однако вместо применения указанных параметров языкового стандарта к текущей среде параметры сохраняются в возвращаемой структуре _locale_t. Структура _locale_t должна быть освобождена, _free_locale если она больше не нужна.

_wcreate_locale — это версия _create_localeс расширенными символами; аргумент locale для _wcreate_locale — строка расширенных символов. Поведение_wcreate_locale и _create_locale идентично в противном случае.

Аргумент category определяет соответствующие фрагменты поведения, связанные с локальным стандартом. Флаги, используемые для 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.

Эта функция проверяет параметры category и locale. Если параметр категории не является одним из значений, заданных в предыдущей таблице или locale если это NULL, функция возвращается NULL.

Аргумент locale является указателем на строку, которая задает языковой стандарт. Сведения о формате аргумента locale см. в строках языков, языков и стран и регионов.

Аргумент locale может принимать несколько типов значений: имя языкового стандарта, языковая строка, код языка и страны или региона, код кодовой страницы или сочетание языковой строки, кода страны или региона и кодовой страницы. Набор (доступных имен языков, языков, кодов стран или регионов и кодовых страниц) включает все, которые поддерживаются API NLS Windows. Набор поддерживаемых имен _create_locale языков описан в строках языкового стандарта, языков и стран или регионов. Набор строк языка и страны или региона, поддерживаемых _create_locale в строках языка и регионе, перечислены в строках языка и странах или регионах.

Дополнительные сведения о параметрах языкового стандарта см. в разделе setlocale. _wsetlocale

Предыдущее название этой функции, __create_locale (с двумя символами подчеркивания в начале), использовать не рекомендуется.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Требования

Маршрут Обязательный заголовок
_create_locale <locale.h>
_wcreate_locale <locale.h> или <wchar.h>

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

Пример

// crt_create_locale.c
// Sets the current locale to "de-CH" using the
// setlocale function and demonstrates its effect on the strftime
// function.

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

int main(void)
{
    time_t ltime;
    struct tm thetime;
    unsigned char str[100];
    _locale_t locale;

    // Create a locale object representing the German (Switzerland) locale
    locale = _create_locale(LC_ALL, "de-CH");
    time (&ltime);
    _gmtime64_s(&thetime, &ltime);

    // %#x is the long date representation, appropriate to
    // the current locale
    if (!_strftime_l((char *)str, 100, "%#x",
                     (const struct tm *)&thetime, locale))
    {
        printf("_strftime_l failed!\n");
    }
    else
    {
        printf("In de-CH locale, _strftime_l returns '%s'\n", str);
    }

    _free_locale(locale);

    // Create a locale object representing the default C locale
    locale = _create_locale(LC_ALL, "C");
    time(&ltime);
    _gmtime64_s(&thetime, &ltime);

    if (!_strftime_l((char *)str, 100, "%#x",
                     (const struct tm *)&thetime, locale))
    {
        printf("_strftime_l failed!\n");
    }
    else
    {
        printf("In 'C' locale, _strftime_l returns '%s'\n", str);
    }

    _free_locale(locale);
}
In de-CH locale, _strftime_l returns 'Samstag, 9. Februar 2002'
In 'C' locale, _strftime_l returns 'Saturday, February 09, 2002'

См. также

Имена языков, языки и строки страны или региона
Языковые строки
Строки страны и региона
_free_locale
_configthreadlocale
setlocale
Локаль
localeconv
_mbclen, mblen, _mblen_l
strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
mbstowcs, _mbstowcs_l
mbtowc, _mbtowc_l
_setmbcp
setlocale, _wsetlocale
Функции strcoll
strftime, wcsftime, _strftime_l, _wcsftime_l
strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l
wcstombs, _wcstombs_l
wctomb, _wctomb_l