2009-02-20 6 views
15

Je suis assez nouveau pour la programmation localisée, et j'essaie de comprendre comment définir les paramètres régionaux initiaux appropriés pour une application C++ non gérée récemment lancée (à partir de l'application). Pour autant que je sache, les nouvelles applications commencent par les paramètres régionaux C, plutôt que par les paramètres régionaux régionaux appropriés (anglais, allemand, etc.). Donc, ce que je dois faire est d'appeler setlocale(LC_ALL, "???"), mais je ne suis pas sûr de savoir comment obtenir la valeur correcte pour le second argument. Il s'agira de quelque chose comme "English" ou "German: Germany" - essentiellement les paramètres régionaux définis par l'utilisateur via le panneau de configuration Options régionales et linguistiques. Juste pour être clair, je suis pas cherchant comment formater la chaîne locale, je suis à la recherche de la chaîne locale correcte pour l'ordinateur sur lequel l'application est en cours d'exécution.comment puis-je définir les paramètres régionaux initiaux appropriés pour un programme C++ sur Windows?

Je suppose qu'il y a une API Win32 qui me donnerait ceci, ou peut-être une clé de registre qui contiendrait la bonne valeur. Est-ce que quelqu'un sait ce que je devrais faire?

Répondre

25

setlocale() est C, pas C++. Je me souviens vaguement avoir vu des interférences entre les deux sur VC6, mais c'était un bug. Normalement, setlocale() affecte uniquement le comportement des fonctions C.

En C++, la localisation est contrôlée par la classe std :: locale. Par défaut, les opérations sensibles aux paramètres régionaux utilisent les paramètres régionaux globaux, obtenus par la construction par défaut d'un objet locale, et peuvent être définis avec std :: locale :: global (const std :: locale &).

La construction d'un objet régional avec une chaîne vide (std :: locale ("")) crée une locale correspondant à l'environnement du programme. Au démarrage du programme, les paramètres régionaux globaux correspondent aux paramètres régionaux «C» ou «Classique». Pour définir les paramètres régionaux global pour les paramètres régionaux de l'environnement du programme (que je suppose est ce que vous demandez), vous écrivez ainsi:

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

Par exemple, mes paramètres régionaux sont actuellement mis à Français (Canada). L'exécution de cette:

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; 
} 

impressions:

C 
French_Canada.1252 
C 
+0

Grand, c'est exactement ce que je avais besoin. Il semble que vous pouvez également passer le nom() d'un environnement local C++ donné à setlocale(), pour définir également le paramètre régional C. – Charlie

Questions connexes