2009-08-11 10 views
2

Ich portiere meine Anwendung in Linux (von Windows).Wie programmgesteuert (C/C++) erhalten Ländercode auf Linux?

Ich habe einen solchen Code:


char buffer[32] = {0}; 

if (GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_ICOUNTRY, buffer, _countof(buffer))) 
{ 
    std::string newPrefix(buffer); 
    if (!newPrefix.empty() && (newPrefix != "-1")) 
    { 
     countryPrefix_ = newPrefix; 
    } 
} 

ich eine Funktion, die Rückkehr benötigen "Land/Region-Code, basierend auf internationalen Telefon-Codes" (zum Beispiel "1" für USA & Kanada, "61" für Australien usw.)
Das Land sollte aus den Datums- und Uhrzeiteinstellungen des Betriebssystems übernommen werden (in Windows: Systemsteuerung - Regional & Sprachoptionen).

+0

Warum sollte Linux hat es von Land statt Zeitzone? Das erscheint übermäßig komplex. Ich bezweifle, dass diese Methode funktionieren wird. Dann wieder, ich bin verwöhnt von Windows. – jkeys

+0

Übrigens, warum wechseln Sie zwischen char * und std :: string in Ihrem Code? – jkeys

+0

@Hooked Ich bevorzuge die Verwendung von STL statt roh Charpuffern. – Dmitriy

Antwort

4
  • Es gibt keine OS-weite Gebietsschemaeinstellung für Unix. Es kann eine Standardeinstellung für Benutzer geben, die sie nicht überschreiben, aber die meisten Benutzer überschreiben sie. Und es ist üblich, es als "C" zu belassen.

  • Es gibt keinen Standard C oder C++ Weg, um die gewünschten Informationen zu erhalten.

  • Die posix-Methode, Informationen zum Gebietsschema zu erhalten, besteht darin, das Gebietsschema und die Verwendung nl_langinfo() (das eine char* zurückgibt) festzulegen. Während für den internationalen Telefoncode kein POSIX-Makro definiert ist, verfügt glibc über eine Erweiterung (_NL_TELEPHONE_INT_PREFIX).

Beispiel:

#include <langinfo.h> 
... 
if (setlocale(LC_ALL, "") == NULL) { 
    fprintf(stderr, "Unable to set locale.\n"); 
    abort(); 
} 
printf("Telephone international prefix: %s\n", nl_langinfo(_NL_TELEPHONE_INT_PREFIX)); 
+0

Ich stimme nicht (ein bisschen) mit Ihnen überein, wenn Sie sagen, dass Benutzer es überschreiben, oder dass es ziemlich üblich ist, es bei "C" zu belassen. Es ist nicht wahr, wenn Sie aus einem nicht englischsprachigen Land kommen. Wenn Sie Ihr Betriebssystem installieren, ist das Gebietsschema korrekt eingestellt wie fr_FR. In der Regel ändern Benutzer sie nicht, sodass Sie bei der Abfrage mit Systemaufruf das richtige Gebietsschema erhalten. Übrigens +1 für deine gute Antwort;) – neuro

+0

Wir haben es bei C auf den Servern und bei fr_FR auf den Workstations. Wenn wir uns bei den Servern anmelden, setzen wir die richtigen Umgebungsvariablen und ich bin weit davon entfernt, einige Umgebungsvariablen zurückzusetzen, um nur einen Teil der Lokalisierung zu erhalten (die Übersetzungen der Fehlermeldung sind komisch, aber zur Zeit verwirrend). Ich weiß, wir haben Kunden, die das gleiche tun (ersetzen die Französisch durch Deutsch, oder beenden oder ... Locales). Das kommt mir so vor, wo ich bin. Und natürlich müssen Sie den Standard vom Betriebssystem und den Standard von der Desktop-GUI unterscheiden, sie können unterschiedlich sein. Unix ist auf den Tod konfigurierbar! – AProgrammer

Verwandte Themen