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(<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 );
}
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
_create_locale, _wcreate_locale
strlen strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
STRFTIME, wcsftime, _strftime_l, _wcsftime_l