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(<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, "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
strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
STRFTIME, wcsftime, _strftime_l, _wcsftime_l