Share via


_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
地區設定指定名稱。

傳回值

如果提供有效的 localecategory ,函式會將指定的地區設定當做 _locale_t 物件傳回。 程式的目前地區設定不會變更。

備註

_create_locale 函式可讓您建立代表某些特定地區設定的物件,以供許多 CRT 函式 (尾碼為 _l 的函式) 的特定地區設定版本使用。 此行為類似於 setlocale,但不會將指定的地區設定套用至目前的環境,而是將設定儲存在傳回的 _locale_t 結構中。 _locale_t當不再需要結構時,應該使用 _free_locale 釋放結構。

_wcreate_locale 是寬字元版本的 _create_localelocale_wcreate_locale 引數是寬字元字串。 否則,_wcreate_locale_create_locale 的行為即會相同。

category 引數會指定特定地區設定行為中受影響的部分。 用於 category 的旗標及其影響之程式的各個部分,如下表所示:

category 旗標 Affects
LC_ALL 所有分類,如下所示。
LC_COLLATE strcoll_stricollwcscoll_wcsicollstrxfrm_strncoll_strnicoll_wcsncoll_wcsnicoll 以及 wcsxfrm 函式。
LC_CTYPE 字元處理函式 (除了 isdigitisxdigitmbstowcsmbtowc,這些不會受到影響)。
LC_MONETARY localeconv 函式傳回的貨幣格式資訊。
LC_NUMERIC printf 所傳回適用於格式化輸出常式 (如 localeconv)、資料轉換常式和非貨幣格式化資訊的小數點字元。 除了小數點字元之外, LC_NUMERIC 還設定 所傳 localeconv 回的千位分隔符號和群組控制字元串。
LC_TIME strftimewcsftime 函式。

這個函式會驗證 categorylocale 參數。 如果類別參數不是上表指定的其中一個值,或 如果 localeNULL ,則函式會傳 NULL 回 。

locale 引數是指向會指定地區設定的字串指標。 如需引數格式 locale 的詳細資訊,請參閱 地區設定名稱、語言和國家/地區字串

locale 變數可以採用數種值:地區設定名稱、語言字串、語言字串和國家/地區代碼、字碼頁,或語言字串、國家/地區代碼和字碼頁的組合。 一組可用的地區設定名稱、語言、國家/地區代碼和字碼頁,包含 Windows NLS API 支援的所有專案。 地區設定名稱 _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