std:: setlocale
|
Definido en el encabezado
<clocale>
|
||
|
char
*
setlocale
(
int
category,
const
char
*
locale
)
;
|
||
La función
setlocale
instala la configuración regional del sistema especificada o una parte de ella como la nueva configuración regional C. Las modificaciones permanecen en efecto e influyen en la ejecución de todas las funciones de la biblioteca C sensibles a la configuración regional hasta la siguiente llamada a
setlocale
. Si
locale
es un puntero nulo,
setlocale
consulta la configuración regional C actual sin modificarla.
Contenidos |
Parámetros
| categoría | - |
identificador de categoría de configuración regional, uno de las macros
LC_xxx
. Puede ser
0
.
|
| locale | - | identificador de configuración regional específico del sistema. Puede ser "" para la configuración regional preferida del usuario o "C" para la configuración regional mínima |
Valor de retorno
Puntero a una cadena terminada en nulo que identifica la configuración regional C después de aplicar los cambios, si los hay, o puntero nulo en caso de fallo.
Una copia de la cadena devuelta junto con la categoría utilizada en esta llamada a
std::setlocale
puede utilizarse posteriormente en el programa para restaurar la configuración regional al estado existente al final de esta llamada.
Notas
Durante el inicio del programa, el equivalente de std :: setlocale ( LC_ALL , "C" ) ; se ejecuta antes de que se ejecute cualquier código de usuario.
Aunque el tipo de retorno es char * , modificar los caracteres apuntados es comportamiento indefinido.
Debido a que
setlocale
modifica el estado global que afecta la ejecución de funciones dependientes de la configuración regional, es comportamiento indefinido llamarlo desde un hilo, mientras otro hilo está ejecutando cualquiera de las siguientes funciones:
std::fprintf
,
std::isprint
,
std::iswdigit
,
std::localeconv
,
std::tolower
,
std::fscanf
,
std::ispunct
,
std::iswgraph
,
std::mblen
,
std::toupper
,
std::isalnum
,
std::isspace
,
std::iswlower
,
std::mbstowcs
,
std::towlower
,
std::isalpha
,
std::isupper
,
std::iswprint
,
std::mbtowc
,
std::towupper
,
std::isblank
,
std::iswalnum
,
std::iswpunct
,
std::setlocale
,
std::wcscoll
,
std::iscntrl
,
std::iswalpha
,
std::iswspace
,
std::strcoll
,
std::wcstod
,
std::isdigit
,
std::iswblank
,
std::iswupper
,
std::strerror
,
std::wcstombs
,
std::isgraph
,
std::iswcntrl
,
std::iswxdigit
,
std::strtod
,
std::wcsxfrm
,
std::islower
,
std::iswctype
,
std::isxdigit
.
POSIX también define una localización llamada "POSIX" , que siempre está accesible y es exactamente equivalente a la localización mínima predeterminada "C" .
POSIX también especifica que el puntero devuelto, no solo el contenido de la cadena apuntada, puede quedar invalidado por llamadas posteriores a
setlocale
.
Ejemplo
#include <clocale> #include <cstdio> #include <ctime> #include <cwchar> #include <iterator> #include <string> int main() { // Crear una "copia profunda" del nombre de la configuración regional actual. std::string prev_loc = std::setlocale(LC_ALL, nullptr); // La configuración regional C será inglés habilitado para UTF-8, // el punto decimal será alemán, // el formato de fecha y hora será japonés. if (const char* loc = std::setlocale(LC_ALL, "en_US.UTF-8")) std::wprintf(L"New LC_ALL locale: %s\n", loc); if (const char* loc = std::setlocale(LC_NUMERIC, "de_DE.UTF-8")) std::wprintf(L"New LC_NUMERIC locale: %s\n", loc); if (const char* loc = std::setlocale(LC_TIME, "ja_JP.UTF-8")) std::wprintf(L"New LC_TIME locale: %s\n", loc); wchar_t buf[100]; std::time_t t = std::time(nullptr); std::wcsftime(buf, std::size(buf), L"%A %c", std::localtime(&t)); std::wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, buf); // Restaurar la configuración regional anterior. if (const char* loc = std::setlocale(LC_ALL, prev_loc.c_str())) std::wprintf(L"Restorred LC_ALL locale: %s\n", loc); }
Salida posible:
New LC_ALL locale: en_US.UTF-8 New LC_NUMERIC locale: de_DE.UTF-8 New LC_TIME locale: ja_JP.UTF-8 Number: 3,14 Date: 日曜日 2022年11月06日 20時40分59秒 Restorred LC_ALL locale: C
Véase también
|
categorías de localización para
std::setlocale
(constante macro) |
|
|
conjunto de facetas polimórficas que encapsulan diferencias culturales
(clase) |
|
|
Documentación de C
para
setlocale
|
|
Enlaces externos
| 1. | Lista de nombres de configuración regional de Windows . |
| 2. | Lista de nombres de configuración regional de Linux . |