setlocale, _wsetlocale
Nach oben zu locale.h - Index
Header-Datei
locale.h
Kategorie
Verschiedene Routinen
Prototyp
char *setlocale(int category, const char *locale);
wchar_t * _wsetlocale( int category, const wchar_t *locale);
Beschreibung
setlocale dient zum Auswählen oder Abrufen eines Gebietsschemas.
C++Builder unterstützt alle Gebietsschemata, die von den Betriebssystemen Win95/98/2000 unterstützt werden. Weitere Informationen finden Sie in der Dokumentation zu Ihrem Betriebssystem.
Das Argument category kann folgende Werte annehmen:
LC_ALL |
Betrifft alle nachfolgend genannten Kategorien. |
LC_COLLATE |
Betrifft strcoll und strxfrm. |
LC_CTYPE |
Betrifft Funktionen zur Bearbeitung von Einzelbyte-Zeichen. Die Funktionen mbstowcs und mbtowc sind nicht betroffen. |
LC_MONETARY |
Betrifft die Formatierung von Währungsdaten durch die Funktion localeconv. |
LC_NUMERIC |
Betrifft die Formatierung des Dezimalzeichens bei Zahlen, die keine Währungsdaten darstellen. Hierzu gehören die Familie der printf-Funktionen und die von localeconv zurückgegebenen Daten. |
LC_TIME |
Betrifft strftime |
Das Argument locale ist ein Zeiger auf den Namen des Gebietsschemas oder die benannte Gebietsschemakategorie. Wenn ein NULL-Zeiger übergeben wird, wird das aktuell verwendete Gebietsschema zurückgegeben. Wird ein Zeiger übergeben, der auf einen Null-String zeigt, ermittelt setlocale anhand der Umgebungsvariablen, welches Gebietschema eingestellt ist. Bei den Namen der Gebietsschemata wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Wenn setlocale eine Anforderung nach einem Gebietsschemas nicht befriedigen kann, wird das vorhandene, aktuell verwendete Gebietsschema nicht geändert und ein NULL-Zeiger zurückgegeben.
Wenn für das Argument locale ein NULL-Zeiger angegeben wird, wird der Gebietsschema-String für die Kategorie zurückgegeben. Wenn category den Wert LC_ALL hat, wird ein vollständiger Gebietsschema-String zurückgegeben. Der vollständige Gebietsschema-String umfasst die durch Semikolons voneinander getrennten Namen aller im aktuellen Gebietschema enthaltenen Kategorien. Dieser String kann als Parameter locale im Aufruf von setlocale mit einem der LC_xxx-Werte verwendet werden. Dadurch werden alle Gebietschemakategorien, die im vollständigen Gebietsschema-String genannt werden, wiederhergestellt und das Speichern und Wiederherstellen von Gebietsschemazuständen ermöglicht. Wenn der vollständige Gebietsschema-String nur mit einer Kategorie, z. B. LC_TIME, verwendet wird, wird nur diese Kategorie aus dem Gebietsschema-String wiederhergestellt.
Wird für den Parameter locale ein leerer String "" angegeben, dann wird ein durch die Implementierung definiertes Gebietsschema verwendet. Dies entspricht dem für ANSI C definierten Verhalten.
Wenn Sie dynamisch ladbare Gebietsschemata in einer Anwendung nutzen möchten, definieren Sie __USELOCALES__ für jedes Modul. Wird __USELOCALES__ nicht definiert, funktionieren Funktionen und Makros, die durch die Gebietsschemaeinstellung beeinflusst werden, nur mit dem Standardgebietsschema für C.
Wenn für den Parameter locale ein NULL-Zeiger übergeben wird, gibt setlocale einen String zurück, der das aktuell verwendete Gebietsschema angibt. Wird für den Parameter category eine einzelne Kategorie, etwa LC_COLLATE, angegeben, zeigt der Rückgabewert auf einen String, der den Namen der betreffenden Kategorie enthält. Wird LC_ALL für den Parameter category angegeben, dann zeigt der Rückgabewert auf einen String, der einen vollständigen Gebietsschema-String enthält und die Namen aller verwendeten Kategorien angibt.
. . . localenameptr = setlocale( LC_COLLATE, NULL ); if (localenameptr) printf( "%s\n", localenameptr ); . . .
Mit diesem Code wird einer der Modulnamen sowie die angegebene Codeseite ausgegeben. Beispielsweise könnte die Ausgabe wie folgt lauten: LC_COLLATE = English_United States.437.
. . . localenameptr = setlocale( LC_ALL, NULL ); if (localenameptr) printf( "%s\n", localenameptr ); . . .
Die Ausgabe könnte beispielsweise so aussehen:
LC_COLLATE=English_United States.437; LC_TIME=English_United States.437; LC_CTYPE=English_United States.437;
Die einzelnen Kategorien in diesem vollständigen String sind jeweils durch ein Semikolon begrenzt. Dieser String kann von einer Anwendung kopiert und gespeichert werden, so dass er zu einem späteren Zeitpunkt zum Wiederherstellen derselben Gebietsschemakategorien verwendet werden kann. Jeder Name entspricht einer der in locale.h definierten Gebietsschemakategoriekonstanten. Daher handelt es sich beim ersten Namen um den Namen der Kategorie LC_COLLATE, beim zweiten um den Namen der Kategorie LC_CTYPE usw. Alle anderen in der Header-Datei locale.h genannten Kategorien sind für künftige Implementierungen reserviert.
So werden alle Standardkategorien für das angegebene französische Gebietsschema festgelegt:
setlocale( LC_ALL, "French_France.850" );
So finden Sie heraus, welche Codeseite gegenwärtig verwendet wird:
localenameptr = setlocale( LC_ALL, NULL );
Rückgabewert
Wenn die Auswahl erfolgreich war, gibt setlocale einen Zeiger auf einen String zurück, der der gewählten Kategorie (oder möglicherweise allen Kategorien) des neuen Gebietsschemas zugeordnet ist.
Wenn UNICODE definiert wurde, gibt _wsetlocale einen wchar_t-String zurück.
Im Fehlerfall wird ein NULL-Zeiger zurückgegeben und das Gebietsschema nicht geändert. Alle anderen möglichen Rückgabewerte wurden oben erläutert.
Beispiel
#include <locale.h> #include <stdio.h> int main(void) { char *old_locale; old_locale = setlocale(LC_ALL,"C"); printf("Old locale was %s\n",old_locale); return 0; }
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
setlocale |
+ |
+ |
+ |
+ |
_wsetlocale |
+ |