Compartilhar via


setlocale, _wsetlocale

Defina a localidade.

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

Parâmetros

  • category
    Categoria afetada pela localidade.

  • locale
    Nome de localidade.

Valor de retorno

Se uma categoria e localidade válida forem fornecidos, retorna um ponteiro para a seqüência associada a categoria e localidade especificada.Se a localidade ou categoria for inválido, retorna que um ponteiro nulo e as configurações de localidade corrente do programa não são alteradas.

Por exemplo, a telefonar

setlocale( LC_ALL, "English" );

define todas as categorias, retornando somente a seqüência de caracteres

English_United States.1252

Se todas as categorias não estiverem explicitamente definidas por uma telefonar para setlocale, a função retorna uma seqüência de caracteres que indica a configuração corrente de cada uma das categorias, separadas por ponto-e-vírgula. Se o locale argumento é um ponteiro nulo, setlocale Retorna um ponteiro para a seqüência associada a category da localidade do programa; configuração de localidade corrente do programa não será alterada.

Ponteiro nulo é uma diretiva especial que informa ao setlocale a consulta em vez de conjunto o ambiente internacional. Por exemplo, a sequência de chamadas

// Set all categories and return " English_United States.1252"

setlocale( LC_ALL, "English" );

// Set only the LC_MONETARY category and return "French_France.1252"

setlocale( LC_MONETARY, "French" );

setlocale( LC_ALL, NULL );

Retorna

LC_COLLATE= English_United States.1252;

LC_CTYPE= English_United States.1252;

LC_MONETARY=French_France.1252;

LC_NUMERIC= English_United States.1252;

LC_TIME= English_United States.1252

qual é a seqüência de caracteres associada a LC_ALL categoria.

É possível usar o ponteiro de seqüência de caracteres retornado por setlocale em chamadas subseqüentes restauração a parte informações de localidade do programa, pressupondo que o programa não altera o ponteiro do mouse ou a seqüência de caracteres. Chamadas posteriores para setlocale Substituir a seqüência de caracteres; você pode usar _strdup para salvar uma seqüência de localidade específica.

Comentários

Use o setlocale função para conjunto, alterar ou consultar algumas ou todas as informações de localidade corrente do programa especificadas por locale e category. locale refere-se a localidade (Country/região e linguagem) para o qual você pode personalizar determinados aspectos do seu programa. Algumas categorias dependente de localidade incluem a formatação de datas e o formato de exibição de valores monetários.Se você conjunto locale para a seqüência de caracteres padrão para um linguagem com suporte no seu computador de vários formulários, você deve verificar o setlocale o código de retorno para ver qual linguagem está em vigor. Por exemplo, usar "chinês" poderia resultar em um valor retornadochinese-simplified ou chinese-traditional.

_wsetlocale é uma versão de caractere largo da setlocale; o locale valor de argumento e o retorno de _wsetlocale são seqüências de caracteres largos. _wsetlocale e setlocale tenham comportamento idêntico caso contrário.

Mapeamentos de rotina de texto genérica

Rotina TCHAR.H

_UNICODE & _MBCS não definido

_MBCS definido

_UNICODE definido

_tsetlocale

setlocale

setlocale

_wsetlocale

The category argumento especifica as partes de informações de localidade do programa que são afetadas. sistema autônomo macros usadas para category e sistema autônomo partes do programa que eles afetem são da seguinte maneira:

  • LC_ALL
    Todas sistema autônomo categorias, sistema autônomo mostrado a seguir.

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

  • LC_CTYPE
    As funções de manipulação de caractere (exceto isdigit, isxdigit, mbstowcs, e mbtowcque não são afetadas).

  • LC_MONETARY
    Informações de formatação Monetary retornadas pelo localeconv função.

  • LC_NUMERIC
    Caractere de ponto decimal para sistema autônomo rotinas de saída formatada (por exemplo, printf), sistema autônomo rotinas de conversão de dados e para a formatação não monetários informações retornadas pela localeconv.    Juntamente com o caractere de ponto decimal LC_NUMERIC também separador de milhares de conjuntos e o agrupamento controle seqüência de caracteres retornada pelo localeconv.

  • LC_TIME
    The strftime e wcsftime funções.

Esta função valida o parâmetro de categoria.Se o parâmetro de categoria não é um dos valores listados na tabela acima, o manipulador de parâmetro inválido é chamado, sistema autônomo descrito em Validação de parâmetro. Se a execução for permitida para continuar, a função define errno para EINVAL e retornos NULL.

The locale argumento é um ponteiro para uma seqüência de caracteres que especifica o nome da localidade. If locale aponta para uma seqüência vazia, a localidade é o ambiente nativo definidos para implementação. Um valor de C Especifica o ambiente de conformidade ANSI mínimo para conversão de C. The C localidade pressupõe que todos os char os tipos de dados são de 1 byte e que seu valor é sempre menor que 256.

No início do programa, o equivalente a demonstrativo a seguir é executado:

setlocale( LC_ALL, "C" );

The locale argumento possui o seguinte formato:

locale :: "lang[_country_region[.code_page]]"

| ".code_page"

| ""

| NULL

O conjunto de idiomas disponível, códigos de Country/região e páginas de código inclui todos sistema autônomo suportados pela API NLS do Win32 exceto páginas de código que exigem mais de dois bytes por caractere, sistema autônomo UTF-8 e UTF-7.Se você fornecer uma página de código como UTF-7 ou UTF-8, setlocale falhará, retornando nulo. O conjunto de códigos de linguagem e Country/região têm suportado setlocale está listado na linguagem e Country strings.

If locale é um ponteiro nulo, setlocale consultas, e não define o ambiente internacional e retorna um ponteiro para a seqüência associada à category. Configuração de localidade corrente do programa não será alterada.Por exemplo,

setlocale( LC_ALL, NULL );

Retorna a seqüência associada a category.

Os exemplos a seguir pertencem ao LC_ALL categoria. Um das seqüências de caracteres ".OCP" e ".ACP" pode ser usado no lugar de um número de página de código para especificar o uso de página de código OEM padrão de usuário e página de código ANSI padrão do usuário, respectivamente.

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

  • setlocale( LC_ALL, ".OCP" );
    Explicitamente define a localidade na página de código OEM corrente obtido o sistema operacional.

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

  • setlocale( LC_ALL, "[lang_ctry]" );
    Define a localidade para o linguagem e Country indicado, usando a página de código padrão obtida do sistema operacional do host.

  • setlocale( LC_ALL, "[lang_ctry.cp]" );
    Define a localidade do linguagem, Country/região e página de código indicada no lang_ctry.cp] cadeia de caracteres. Você pode usar várias combinações de linguagem, Country/região e 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, "[lang]" );
    Define a localidade para o Country indicado, usando o Country/região padrão para o linguagem especificado e a página de código ANSI padrão do usuário para esse Country/região sistema autônomo obtido do sistema operacional do host.Por exemplo, as seguintes duas chamadas para setlocale são funcionalmente equivalentes:

    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, usando a linguagem (conforme definido pelo sistema operacional do host) e Country/região padrão para a página de código especificada.

A categoria deve ser um dos LC_ALL ou LC_CTYPE para efetuar uma alterar da página de código. Por exemplo, se o Country/região padrão e o linguagem do sistema operacional host são "EUA" e "English", os dois seguintes chama parasetlocale são funcionalmente equivalentes:

setlocale( LC_ALL, ".1252" );

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

Para obter mais informações, consulte o pragma setlocale in the Referência de pré-processador.

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

Requisitos

Rotina

Cabeçalho necessário

setlocale

<localidade.h>

_wsetlocale

<localidade.h> ou <wchar.h>

Para obter informações adicionais compatibilidade, consulte Compatibilidade na introdução.

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, "German"));

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

    // 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 English locale is: '%s'\n\n", str);
    }

    // Wait for the created thread to finish.
    WaitForSingleObject( hThread, INFINITE );

    // Destroy the thread object.
    CloseHandle( hThread );
}

The thread locale is now set to English_United States.1252. The time in English locale is: 'Wednesday, May 12, 2004'  The thread locale is now set to German_Germany.1252. The time in German locale is: 'Mittwoch, 12. Mai 2004'

Equivalente do NET Framework

Classe sistema::globalização::CultureInfo

Consulte também

Referência

_configthreadlocale

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 strcoll

STRFTIME, wcsftime, _strftime_l, _wcsftime_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l