Namespaces
Variants

std:: setlocale

From cppreference.net
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 .