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 NummerMakros & 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 NummerFunktionen & Beschreibung
1char *setlocale(int category, const char *locale)
Setzt oder liest Lokalisierungsinformationen.
2struct lconv *localeconv(void)
Setzt oder liest Lokalisierungsinformationen.
3locale_t newlocale(int category_mask, const char *locale, locale_t base)
Erstellt ein neues Lokalisierungsobjekt.
4freelocale(locale_t locale)
Gibt ein Lokalisierungsobjekt frei.
5locale_t uselocale(locale_t newloc)
Legt das Lokalisierungsobjekt des Threads fest oder fragt es ab.

Beispiel

Festlegen und Abfragen von Lokalisierungsinformationen:

Beispiel

#include <stdio.h>
#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 <stdio.h>
#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 <stdio.h>
#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 NummerFelder & 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:

WertBeschreibung
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.
Weitere Erweiterungen