2009-02-20 11 views
15

Soy bastante nuevo en la programación localizada, y estoy tratando de encontrar la manera de establecer la configuración regional inicial adecuada para una aplicación C++ no administrada recién lanzada (desde dentro de la aplicación).¿cómo configuro la configuración regional inicial adecuada para un programa C++ en Windows?

Por lo que puedo decir, las nuevas aplicaciones comienzan con la configuración regional C, en lugar de la configuración regional adecuada (inglés, alemán, etc.). Entonces, lo que tengo que hacer es llamar al setlocale(LC_ALL, "???"), pero no estoy seguro de cómo obtener el valor correcto para el segundo argumento. Será algo así como "Inglés" o "Alemán: Alemania", básicamente, cualquiera que sea el lugar establecido por el usuario a través del panel de control regional y de opciones de idioma. Para que quede claro, estoy no buscando cómo formatear la cadena de localización, estoy buscando la cadena de configuración regional correcta para la computadora donde se ejecuta la aplicación.

Supongo que hay alguna API de Win32 que me daría esto, o quizás una clave de registro que contuviera el valor adecuado. ¿Alguien sabe lo que debería estar haciendo?

Respuesta

25

setlocale() es C, no C++. Recuerdo vagamente haber visto interferencias entre los dos en VC6, pero eso fue un error. Normalmente, setlocale() afecta el comportamiento de las funciones C solamente.

En C++, la localización está controlada por la clase std :: locale. De forma predeterminada, las operaciones sensibles a la configuración regional usan la configuración regional global, que se obtiene de forma predeterminada, construyendo un objeto de configuración regional, y se puede establecer con std :: locale :: global (const std :: locale &).

La construcción de un objeto de configuración regional con una cadena vacía (std :: locale ("")) crea una configuración regional correspondiente al entorno del programa.

Al iniciarse el programa, la configuración regional global es la configuración regional "C" o "Clásica". Para establecer la configuración regional global para el medio ambiente local del programa (que supongo que es lo que está pidiendo), que por lo tanto escribir:

std::locale::global(std::locale("")); 

Por ejemplo, mi configuración regional se establece actualmente a Francés (Canadá). La ejecución de este:

int main(void) 
{ 
    std::cout << std::locale().name() << std::endl; 
    std::locale::global(std::locale("")); 
    std::cout << std::locale().name() << std::endl; 
    std::locale::global(std::locale("C")); 
    std::cout << std::locale().name() << std::endl; 
    return 0; 
} 

impresiones:

C 
French_Canada.1252 
C 
+0

Grandes, esto es exactamente lo que necesitaba. Parece que también puede pasar el nombre() de una configuración regional de C++ dada a setlocale(), para establecer también la configuración regional C. – Charlie

Cuestiones relacionadas