Was genau bedeuten die LC_*-Gebietsschemazeichenfolgen unter Linux?

Was genau bedeuten die LC_*-Gebietsschemazeichenfolgen unter Linux?

Wenn ich in meine Linux-Eingabeaufforderung tippe

locale

Ich erhalte eine lange Liste mit LC_*Variablen (wie LC_TIMEusw.). Die Werte der Variablen sehen ungefähr so ​​aus wie die in dieser Liste:

en_US.8859-1
de_DE@euro
fr_FR.utf-8

Was bedeuten die einzelnen Teile genau?

Ich weiß, dass das @euroidentisch ist mit .8859-15und im Allgemeinen bedeutet der letzte Teil den tatsächlichen Zeichensatz (die Zuordnung von Bytes zu tatsächlichen Symbolen). Aber was genau „tun“ die ersten beiden Codes? Welche Eigenschaften des Systems beeinflussen sie? Was ist beispielsweise (nur um ein Beispiel zum Arbeiten zu haben) der Unterschied zwischen en_US.8859-15, de_DE.8859-15, de_CH.8859-15und en_CU.8859-15? Alle haben genau denselben Zeichensatz, sodass alle Textdateien, die ich im Editor meiner Wahl öffne, gleich aussehen würden. Was würde also passieren, wenn ich von einem „Pre-Charset-Code“ zu einem anderen „Pre-Charset-Code“ wechsle (wie von de_CHzu en_US)?

Gibt es Tabellen, in denen die Unterschiede in einer schönen, leicht lesbaren Tabelle aufgeführt sind?

Antwort1

Die beiden Teile bilden eineISO-639-SprachcodeDer erste Teil ist die Sprache selbst, und der zweite ist (normalerweise) einLandesvorwahlAngabe der lokalen Variante.

Sie können die Auswirkungen von Änderungen LANGbei fast jedem Programm beobachten, das Übersetzungen hat. LC_COLLATEwirkt sich auf die Ergebnisse des sortProgramms aus; LC_DATEwirkt sich auf die Ausgabe von dateund ls -laus. Bei einigen Gebietsschemaeinstellungen ist es möglich (sogar wahrscheinlich), dass Sie nichts installiert haben, das diese verwendet.

Auf den meisten Systemen LC_LANGist nur festgelegt und alle anderen Einstellungen werden auf diese Weise übernommen.

Das folgende Zitat aus der Manpage von locale(7) ist relevant:

LC_COLLATE
Damit lässt sich das Verhalten der Funktionen strcoll(3) und strxfrm(3) ändern, die zum Vergleichen von Zeichenketten im lokalen Alphabet verwendet werden. So wird beispielsweise das deutsche scharfe s als "ss" sortiert.
LC_CTYPE
Dies ändert das Verhalten der Zeichenbehandlungs- und Klassifizierungsfunktionen wie isupper(3) und toupper(3) sowie der Multibyte-Zeichenfunktionen wie mblen(3) oder wctomb(3).
LC_MONETARY
ändert die von localeconv(3) zurückgegebenen Informationen, die beschreiben, wie Zahlen normalerweise gedruckt werden, mit Details wie Dezimalpunkt oder Dezimalkomma. Diese Informationen werden intern von der Funktion strfmon(3) verwendet.
LC_MESSAGES
ändert die Sprache, in der Nachrichten angezeigt werden, und wie eine positive oder negative Antwort aussieht. Die GNU C-Bibliothek enthält die Funktionen gettext(3), ngettext(3) und rpmatch(3), um die Verwendung dieser Informationen zu erleichtern. Die GNU gettext-Funktionsfamilie befolgt auch die Umgebungsvariable LANGUAGE (die eine durch Doppelpunkte getrennte Liste von Gebietsschemas enthält), wenn die Kategorie auf ein anderes gültiges Gebietsschema als „C“ eingestellt ist.
LC_NUMERIC
ändert die Informationen, die von den Funktionen der printf(3)- und scanf(3)-Familie verwendet werden, wenn ihnen empfohlen wird, die Locale-Einstellungen zu verwenden. Diese Informationen können auch mit der Funktion localeconv(3) gelesen werden.
LC_ZEIT
ändert das Verhalten der Funktion strftime(3), um die aktuelle Zeit in einer lokal akzeptablen Form anzuzeigen; in den meisten Teilen Europas wird beispielsweise eine 24-Stunden-Uhr verwendet, in den USA hingegen eine 12-Stunden-Uhr.
LC_ALLAlle oben genannten.

verwandte Informationen