2017-10-25 1 views
0

Ich studiere C++ und ich habe diese Funktion der C++ - Bibliothek gefunden: setlocale (http://www.cplusplus.com/reference/clocale/setlocale/), aber ich bin nicht in der Lage zu verstehen, wofür es ist.Was ist setlocale() für?

printf ("Locale is: %s\n", setlocale(LC_ALL,""));

druckt Locale is: en_US.UTF-8

aber auf Mac OS druckt:

ich auf Ubuntu verwendet haben

Locale is: C was dieses C tut bedeutet?

In welchem ​​Kontext und wie sollte es verwendet werden?

+1

es scheint mit Währung, Datum und anderen regionspezifischen Eingangsinterpretation –

+0

von http: // www verwandt zu sein.cplusplus.com/reference/clocale/ Das Gebietsschema "C" ist das minimale Gebietsschema. Es handelt sich um ein eher neutrales Gebietsschema, das über alle Systeme und Compiler dieselben Einstellungen aufweist. Daher sind die genauen Ergebnisse eines Programms, das dieses Gebietsschema verwendet, vorhersagbar. Dies ist das Gebietsschema, das standardmäßig für alle C-Programme verwendet wird. –

Antwort

0

Es sind länderspezifische Einstellungen. Zum Beispiel wird in einigen Ländern Komma als Dezimaltrennzeichen verwendet, in anderen als Punkt. In den USA werden 22.001 oft als 22.000 und 1, in einigen europäischen Ländern als 22 Punkte 001 verstanden.

Daten können in TT/MM/JJJJJ (fast ganz Europa) oder MM/TT/JJJJ (in das US) Format und so weiter.

+0

In welchem ​​Kontext und wie sollte es verwendet werden? – Lilli

+0

Wenn Sie möchten, dass Ihr Programm an einem Ort ausgeführt wird, der eine andere Konvention verwendet. – drescherjm

1

Lesen Sie auf Linux die setlocale(3) und locale(7) man Seiten. Lesen Sie auch die internationalization and localization wikipage.

Unter Debian und Ubuntu könnten Sie (als root) dpkg-reconfigure locales ausführen, um weitere Ländereinstellungen hinzuzufügen.

Dann könnten Sie Ihre LANG (und LC_ALL und andere) Umgebungsvariablen (siehe environ(7)), um die Sprache der Nachricht zu ändern.

Zum Beispiel habe ich das französische UTF-8-Gebietsschema installiert. Wenn ich das tue

% env LC_ALL=fr_FR.UTF-8 ls /tmp/nonexisting 

Ich erhalte die Fehlermeldung in Französisch:

ls: impossible d'accéder à '/tmp/nonexisting': Aucun fichier ou dossier de ce type 

Wenn ich die C Gebietsschema verwenden (die Standardeinstellung ist), ist es in Englisch:

% env LC_ALL=C ls /tmp/nonexisting 
ls: cannot access '/tmp/nonexisting': No such file or directory 

Als Faustregel wollen Sie export LC_ALL=C LANG=C vor dem Ausführen von Befehlen, die Sie in diesem Forum anzeigen (z. B. weil Sie keine Fehlermeldungen vom Compiler oder der Shell anzeigen möchten Französisch).

Wenn Sie Codierung ein Programm, das Sie internationalisieren wollen (ez.g. sein leicht nutzbar Menschen verstehen nur Französisch oder Chinesisch), benötigen Sie mindestens gettext(3) zu verwenden (insbesondere für printf Formatstrings!) und vielleicht textdomain(3) und Sie müssen msgfmt(1) für den Umgang mit Nachrichtenkataloge verwenden. Natürlich müssen Sie Kataloge übersetzter Nachrichten erstellen.

Die Lokalisierung beeinflusst auch, wie Zahlen analysiert und gedruckt werden (mit einem Komma oder einem Punkt, der die Tausender- oder die Dezimalziffern trennt) und wie Geld und Zeit gedruckt und analysiert werden (z. B. strftime(3)).