setlocale, wsetlocale

O conjunto ou recupere a localidade de tempo de execução.

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

Parâmetros

  • category
    Categoria afetada pela localidade.

  • locale
    Especificador da localidade.

Valor de retorno

Se locale válido e são category dados, retorna um ponteiro para a cadeia de caracteres associado a locale especificado e category.Se locale ou category não é válida, retorna um ponteiro zero e as configurações de localidade atual do programa não são alteradas.

Por exemplo, a chamada

setlocale( LC_ALL, "en-US" );

define todas as categorias, retornando somente a cadeia de caracteres

en-US

Você pode usar o ponteiro de cadeia de caracteres retornada por setlocale em chamadas subsequentes para restaurar essa parte das informações de localidade do programa, supondo que seu programa não altera o ponteiro ou cadeia de caracteres.Um chamadas posteriores a setlocale substituem a cadeia de caracteres, que faz ponteiros de cadeia de caracteres retornada por um chamadas anteriores não válidos.Você pode usar _strdup para salvar uma cópia de uma cadeia de caracteres específica da localidade.

Comentários

Use a função de setlocale para definir, modificar, consulte ou algumas ou todas as informações de localidade atual do programa especificado por locale e por category.locale refere-se à localidade (país/região e idiomas) para que você pode personalizar determinados aspectos do seu programa.Algumas categorias de formatação incluem são dependentes de datas e formato de exibição para valores monetários.Se você locale definido como uma cadeia de caracteres padrão para um idioma com vários formulários suportados no seu computador, você verifique o código de retorno de setlocale para ver qual linguagem é aplicado.Por exemplo, usar o “chinês” pode resultar em um valor de retorno de chinese-simplified ou de chinese-traditional.

_wsetlocale é uma versão de largo- caractere de setlocale; o argumento de locale e o valor de retorno de _wsetlocale são cadeias de caracteres de largo- caractere._wsetlocale e setlocale se comportam de forma idêntica.

Mapeamentos da rotina de Genérico- texto

Rotina de TCHAR.H

_UNICODE & _MBCS não definidos

_MBCS definido

_UNICODE definido

_tsetlocale

setlocale

setlocale

_wsetlocale

O argumento de category especifica as partes de informações da localidade de um programa que são afetadas.Macros usados para category e as partes do programa que afetam são:

  • LC_ALL
    Todas as categorias, como listadas abaixo.

  • LC_COLLATE
    strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicoll, e funções de wcsxfrm .

  • LC_CTYPE
    Funções de caractere- tratamento (exceto isdigit, isxdigit, mbstowcs, e mbtowc, que não são afetados.)

  • LC_MONETARY
    Informações de formatação Monetário- retornada pela função de localeconv .

  • LC_NUMERIC
    Caractere de ponto decimal para rotinas de saída (formatados como printf), para rotinas de conversão de dados, e para informações não monetária de formatação retornada por localeconv. Além do caractere de ponto decimal, LC_NUMERIC também define o separador de milhares e a cadeia de caracteres de controle de agrupamento retornados por localeconv.

  • LC_TIME
    Funções de strftime e de wcsftime .

Essa função valida o parâmetro de categoria.Se o parâmetro de categoria não é um dos valores dados na tabela anterior, o manipulador inválido do parâmetro é invocado, como descrito em Validação de parâmetro.Se a execução é permitida continuar, a função errno define a EINVAL e retorna NULL.

O argumento de locale é um ponteiro para uma cadeia de caracteres que especifica a localidade.Para obter informações sobre o formato de argumento de locale , consulte Nomes de localidades, idiomas e cadeias de caracteres de país/região.Se os pontos de locale como uma cadeia de caracteres vazia, a localidade são o ambiente nativo XML definido.Um valor de C especifica o ambiente de conformação mínimo ANSI para a tradução de C.A localidade de C assume que todos os tipos de dados de char são 1 bytes e que o valor é sempre menor que 256.

Na inicialização do programa, o equivalente a seguinte declaração é executado:

setlocale( LC_ALL, "C" );

O argumento de locale pode ter um nome de localidade, uma cadeia de caracteres de idioma, uma cadeia de caracteres de idioma e código de país/região, uma página de código, ou uma cadeia de caracteres de idioma, um código do país/região, e uma página de código.O conjunto de nomes disponíveis de localidade, de idiomas, de códigos do país/região, e páginas de código inclui qualquer esses suportados pelo Windows API NLS exceto as páginas de código que exigem mais de dois bytes pelo caractere, como UTF-7 e UTF-8.Se você fornecer uma página de código como UTF-7 ou UTF-8, setlocale falhará, retornando NULL.O conjunto de nomes de localidade suportados por setlocale é descrito em Nomes de localidades, idiomas e cadeias de caracteres de país/região.O conjunto de linguagem e do país/cadeias de caracteres da região suportadas por setlocale está listado em Seqüências de caracteres de idioma e em Seqüências de caracteres de país/região.

Um ponteiro nulo passado como o argumento de locale informa setlocale para ver em vez de definir o ambiente internacional.Se o argumento de locale é um ponteiro nulo, a configuração de localidade atual do programa não é alterada.Em vez disso, setlocale retorna um ponteiro para a cadeia de caracteres associada com category de localidade atual da thread.Se o argumento de category é LC_ALL, a função retorna uma cadeia de caracteres que indica a configuração atual de cada uma das categorias, separadas por ponto-e-vírgula.Por exemplo, a sequência de chamadas

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

retorna

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

um de eles é a cadeia de caracteres associada com a categoria de LC_ALL .

Os exemplos são pertinentes a categoria de LC_ALL .Qualquer uma das cadeias de caracteres “.OCP” e “.ACP” pode ser usada no lugar de um número de página de código para especificar o uso da página de código de OEM de usuário padrão e página de código ANSI de usuário padrão, respectivamente.

  • setlocale( LC_ALL, "" );
    Define a localidade a opção, que é a página de código ANSI de usuário padrão obtida do sistema operacional.

  • setlocale( LC_ALL, ".OCP" );
    Define explicitamente a localidade à página de código atual de OEM obtida do sistema operacional.

  • setlocale( LC_ALL, ".ACP" );
    Define a localidade à página de código ANSI obtida do sistema operacional.

  • setlocale( LC_ALL, "<localename>" );
    A localidade define o nome da localidade indicado por <localename>.

  • setlocale( LC_ALL, "<language>_<country>" );
    Define a localidade ao idioma e o país/região indicada por <language> e por <country>, usando a página de código padrão obtida de host sistema operacional.

  • setlocale( LC_ALL, "<language>_<country>.<code_page>" );
    Define a localidade a linguagem, ao país/região, e a página de código indicada por <language>, por <country>, e cadeia de caracteres de <code_page> .Você pode usar várias combinações de linguagem, país/região, e da página de código.Por exemplo:

    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>" );
    Defina o local indicado pela linguagem <language>, usando o país/região padrão para o idioma especificado, e a página de código ANSI de usuário padrão para esse país/região como obtido de host sistema operacional.Por exemplo, as chamadas a setlocale são funcionalmente equivalentes:

    setlocale( LC_ALL, "en-US" );
    setlocale( LC_ALL, "English" );
    setlocale( LC_ALL, "English_United States.1252" );
    
  • setlocale( LC_ALL, ".<code_page>" );
    Define a página de código para o valor indicado por <code_page>, usando o país/região e o idioma padrão (conforme definido pelo sistema operacional de host) para a página de código especificada.

A categoria deve ser LC_ALL ou LC_CTYPE para efetuar uma alteração da página de código.Por exemplo, se o país/região e o idioma padrão do sistema operacional host são “Estados Unidos” e “inglês,” os seguintes duas chamadas a setlocale são funcionalmente equivalentes:

setlocale( LC_ALL, ".1252" );

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

Para obter mais informações consulte pragma de setlocalena referênciapré-processamento.

A função _configthreadlocale é usada para controlar se setlocale afeta a localidade de todos os segmentos em um programa ou somente a localidade do segmento de chamada.

Requisitos

Rotina

Cabeçalho necessário

setlocale

<locale.h>

_wsetlocale

<locale.h> ou <wchar.h>

Para informações extras de compatibilidade Compatibilidade na introdução, consulte.

Exemplo

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

Equivalência do .NET Framework

Classe de System::Globalization::CultureInfo

Consulte também

Referência

Nomes de localidades, idiomas e cadeias de caracteres de país/região

_configthreadlocale

_create_locale, _wcreate_locale

Localidade

localeconv

_mbclen, mblen, _mblen_l

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

mbstowcs, _mbstowcs_l

mbtowc, _mbtowc_l

_setmbcp

Funções de strcoll

STRFTIME, wcsftime, _strftime_l, _wcsftime_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l