2009-02-20 11 views
15

Ich bin ziemlich neu in der lokalisierten Programmierung, und ich versuche herauszufinden, wie das richtige anfängliche Gebietsschema für eine neu gestartete nicht verwaltete C++ - Anwendung (von innerhalb der App) festgelegt wird.Wie lege ich das richtige anfängliche Gebietsschema für ein C++ - Programm unter Windows fest?

Soweit ich sagen kann, beginnen neue Anwendungen mit dem C-Gebietsschema, anstatt das richtige regionale Gebietsschema (Englisch, Deutsch, etc). Also, was ich tun muss, ist setlocale(LC_ALL, "???") anrufen, aber ich bin mir nicht sicher, wie man den korrekten Wert für das zweite Argument erhält. Es wird etwas wie "Englisch" oder "Deutsch: Deutschland" sein - im Grunde genommen, welches Gebietsschema vom Benutzer über das Kontrollfeld "Regions- und Sprachoptionen" festgelegt wurde. Nur um klar zu sein, ich bin nicht auf der Suche nach dem Format der Locale-Zeichenfolge, ich bin auf der Suche nach der richtigen Locale-Zeichenfolge für den Computer, auf dem die App ausgeführt wird.

Ich vermute, dass gibt es einige Win32-API, die mir das geben würde, oder vielleicht ein Registrierungsschlüssel, der den richtigen Wert enthalten würde. Weiß jemand, was ich tun soll?

Antwort

25

setlocale() ist C, nicht C++. Ich erinnere mich vage daran, Interferenzen zwischen den beiden auf VC6 zu sehen, aber das war ein Fehler. Normalerweise beeinflusst setlocale() nur das Verhalten der C-Funktionen.

In C++ wird die Lokalisierung von der Klasse std :: locale gesteuert. Standardmäßig verwenden Gebietsschema-sensitive Vorgänge das globale Gebietsschema, das standardmäßig abgerufen wird - ein Gebietsschema-Objekt wird erstellt und kann mit std :: locale :: global (const std :: locale &) festgelegt werden.

Beim Erstellen eines Gebietsschemaobjekts mit einer leeren Zeichenfolge (std :: locale ("")) wird ein Gebietsschema erstellt, das der Umgebung des Programms entspricht.

Beim Programmstart ist das globale Gebietsschema das Gebietsschema "C" oder "Classic". Um das globale Locale auf das Programm der Umgebung Gebietsschema festgelegt (was ich denke, ist, was Sie fragen), schreiben Sie also:

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

Zum Beispiel sind meine regionalen Einstellungen zur Zeit auf Französisch (Kanada). Das Ausführen dieses:

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

druckt:

C 
French_Canada.1252 
C 
+0

Große, das ist genau das, was ich brauchte. Es sieht so aus, als ob Sie auch den Namen() eines gegebenen C++ - Gebietsschemas an setlocale() übergeben können, um auch das C-Gebietsschema zu setzen. – Charlie

Verwandte Themen