C-Standardbibliothek -<locale.h>
Einführung
<locale.h>Ist eine Header-Datei in der C-Standardbibliothek, die zur Unterstützung der Internationalisierung und Lokalisierung von Programmen dient. Sie bietet eine Reihe von Funktionen und Makros zum Festlegen oder Abfragen der Lokalisierungsinformationen des Programms, wie Datums-, Zeit-, Währungs- und Zahlenformate usw.
Als Nächstes stellen wir einige Makros sowie eine wichtige Struktur vor.struct lconvund zwei wichtige Funktionen.
Bibliotheksmakros
Die in der Header-Datei locale.h definierten Makros sind unten aufgeführt; diese Makros werden in den beiden unten aufgeführten Funktionen verwendet:
| Laufende Nummer | Makros & Beschreibung |
|---|---|
| 1 | LC_ALL Wird verwendet, um alle Lokalisierungskategorien festzulegen oder abzufragen. |
| 2 | LC_COLLATE Wird verwendet, um Lokalisierungsinformationen für den Zeichenfolgenvergleich festzulegen oder abzufragen. |
| 3 | LC_CTYPE Wird verwendet, um Lokalisierungsinformationen für die Zeichenverarbeitung festzulegen oder abzufragen. |
| 4 | LC_MONETARY Wird verwendet, um Lokalisierungsinformationen für das Währungsformat festzulegen oder abzufragen. |
| 5 | LC_NUMERIC Wird verwendet, um Lokalisierungsinformationen für das Zahlenformat (z. B. das Dezimaltrennzeichen) festzulegen oder abzufragen. |
| 6 | LC_TIME Wird verwendet, um Lokalisierungsinformationen für das Zeitformat festzulegen oder abzufragen. |
| 7 | locale_t Typen, die Lokalisierungsinformationen darstellen. |
Bibliotheksfunktionen
Die in der Header-Datei locale.h definierten Funktionen sind unten aufgeführt:
| Laufende Nummer | Funktionen & Beschreibung |
|---|---|
| 1 | char *setlocale(int category, const char *locale) Setzt oder liest Lokalisierungsinformationen. |
| 2 | struct lconv *localeconv(void) Setzt oder liest Lokalisierungsinformationen. |
| 3 | locale_t newlocale(int category_mask, const char *locale, locale_t base) Erstellt ein neues Lokalisierungsobjekt. |
| 4 | freelocale(locale_t locale) Gibt ein Lokalisierungsobjekt frei. |
| 5 | locale_t uselocale(locale_t newloc) Legt das Lokalisierungsobjekt des Threads fest oder fragt es ab. |
Beispiel
Festlegen und Abfragen von Lokalisierungsinformationen:
Beispiel
#include <locale.h>
int main() {
// Locale-Informationen auf die Standardeinstellungen aus den Umgebungsvariablen des Benutzers setzen
setlocale(LC_ALL, "");
// Aktuelle Locale-Informationen abrufen und ausgeben
printf("Aktuelles Gebietsschema für LC_ALL: %s\n", setlocale(LC_ALL, NULL));
printf("Aktuelles Gebietsschema für LC_TIME: %s\n", setlocale(LC_TIME, NULL));
printf("Aktuelles Gebietsschema für LC_NUMERIC: %s\n", setlocale(LC_NUMERIC, NULL));
return 0;
}
Die Kompilierungsausgabe lautet:
Current locale for LC_ALL: zh_CN.UTF-8 Current locale for LC_TIME: zh_CN.UTF-8 Current locale for LC_NUMERIC: zh_CN.UTF-8
Abrufen von Informationen zum Zahlen- und Währungsformat:
Beispiel
#include <locale.h>
int main() {
// Locale-Informationen auf die Standardeinstellungen aus den Umgebungsvariablen des Benutzers setzen
setlocale(LC_ALL, "");
// Lokalisierte numerische und monetäre Formatierungsinformationen abrufen
struct lconv *lc = localeconv();
// Numerische und monetäre Formatierungsinformationen ausgeben
printf("Dezimaltrennzeichen: %s\n", lc->decimal_point);
printf("Tausendertrennzeichen: %s\n", lc->thousands_sep);
printf("Währungssymbol: %s\n", lc->currency_symbol);
return 0;
}
Die Kompilierungsausgabe lautet:
Decimal point character: . Thousands separator: , Currency symbol: ¥
Verwendung eines benutzerdefinierten Lokalisierungsobjekts:
Beispiel
#include <locale.h>
#include <xlocale.h>
int main() {
// Ein neues Locale-Objekt erstellen, wobei die Locale-Einstellung "en_US.UTF-8" verwendet wird
locale_t newloc = newlocale(LC_ALL_MASK, "en_US.UTF-8", (locale_t)0);
// Das Locale-Objekt des aktuellen Threads auf das neue Locale-Objekt setzen
locale_t oldloc = uselocale(newloc);
// Abrufen und Ausgeben der Lokalisierungsinformationen des aktuellen Threads
printf("Aktuelles Gebietsschema für LC_NUMERIC: %s\n", setlocale(LC_NUMERIC, NULL));
// Das neue Locale-Objekt freigeben
uselocale(oldloc);
freelocale(newloc);
return 0;
}
Die Kompilierungsausgabe lautet:
Current locale for LC_NUMERIC: C
Bibliotheksstruktur
typedef struct {
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
} lconv
Im Folgenden wird jedes Feld beschrieben:
| Laufende Nummer | Felder & Beschreibung |
|---|---|
| 1 | decimal_point Das Dezimaltrennzeichen, das für nicht-monetäre Werte verwendet wird. |
| 2 | thousands_sep Das Tausendertrennzeichen, das für nicht-monetäre Werte verwendet wird. |
| 3 | grouping Eine Zeichenfolge, die die Größe jeder Zifferngruppe in nicht-monetären Größen darstellt. Jedes Zeichen repräsentiert einen ganzzahligen Wert, und jede ganze Zahl gibt die Anzahl der Ziffern in der aktuellen Gruppe an. Ein Wert von 0 bedeutet, dass der vorherige Wert für die verbleibenden Gruppierungen gilt. |
| 4 | int_curr_symbol Die Zeichenkette, die für das internationale Währungssymbol verwendet wird. Die ersten drei Zeichen sind durch ISO 4217:1987 festgelegt, und das vierte Zeichen wird verwendet, um das Währungssymbol vom Währungsbetrag zu trennen. |
| 5 | currency_symbol Das lokale Symbol, das für die Währung verwendet wird. |
| 6 | mon_decimal_point Das Dezimaltrennzeichen, das für Geldbeträge verwendet wird. |
| 7 | mon_thousands_sep Das Tausendertrennzeichen, das für Geldbeträge verwendet wird. |
| 8 | mon_grouping Eine Zeichenkette, die die Größe jeder Zifferngruppe in Geldbeträgen angibt. Jedes Zeichen repräsentiert einen ganzzahligen Wert, und jede Ganzzahl gibt die Anzahl der Ziffern in der aktuellen Gruppe an. Ein Wert von 0 bedeutet, dass der vorherige Wert für die verbleibenden Gruppierungen gilt. |
| 9 | positive_sign Das Zeichen, das für positive Geldbeträge verwendet wird. |
| 10 | negative_sign Das Zeichen, das für negative Geldbeträge verwendet wird. |
| 11 | int_frac_digits Die Anzahl der Nachkommastellen, die bei internationalen Geldbeträgen angezeigt werden. |
| 12 | frac_digits Die Anzahl der Nachkommastellen, die bei Geldbeträgen angezeigt werden. |
| 13 | p_cs_precedes Wenn gleich 1, erscheint currency_symbol vor dem positiven Geldbetrag. Wenn gleich 0, erscheint currency_symbol nach dem positiven Geldbetrag. |
| 14 | p_sep_by_space Wenn gleich 1, wird ein Leerzeichen verwendet, um currency_symbol und den positiven Geldbetrag zu trennen. Wenn gleich 0, wird kein Leerzeichen zwischen currency_symbol und dem positiven Geldbetrag verwendet. |
| 15 | n_cs_precedes Wenn gleich 1, erscheint currency_symbol vor dem negativen Geldbetrag. Wenn gleich 0, erscheint currency_symbol nach dem negativen Geldbetrag. |
| 16 | n_sep_by_space Wenn der Wert 1 ist, wird ein Leerzeichen verwendet, um currency_symbol und den negativen Geldwert zu trennen. Wenn der Wert 0 ist, wird kein Leerzeichen zwischen currency_symbol und dem negativen Geldwert verwendet. |
| 17 | p_sign_posn Gibt die Position des positiven Vorzeichens in positiven Geldwerten an. |
| 18 | n_sign_posn Gibt die Position des negativen Vorzeichens in negativen Geldwerten an. |
Die folgenden Werte werden fürp_sign_posnundn_sign_posn verwendet:
| Wert | Beschreibung |
|---|---|
| 0 | Die Klammern, die den Wert und currency_symbol umschließen. |
| 1 | Das Symbol, das vor dem Wert und currency_symbol platziert wird. |
| 2 | Das Symbol, das nach dem Wert und currency_symbol platziert wird. |
| 3 | Das Symbol, das unmittelbar vor dem Wert und currency_symbol platziert wird. |
| 4 | Das Symbol, das unmittelbar nach dem Wert und currency_symbol platziert wird. |