Was genau bedeuten die LC_ * -Locale unter Linux?

630
Foo Bar

Wenn ich an meiner Linux-Eingabeaufforderung tippe

locale 

Ich bekomme eine lange Liste von LC_*Variablen (wie LC_TIMEund so weiter). Der Wert der Variablen sieht in etwa so aus wie in dieser Liste:

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

Was genau bedeuten die einzelnen Teile?

Ich weiß, dass @eurodas mit .8859-15dem tatsächlichen Zeichensatz identisch ist (im Allgemeinen ist der letzte Teil) (die Zuordnung von Bytes zu tatsächlichen Symbolen). Aber was genau machen die ersten beiden Codes? Welche Eigenschaften des Systems beeinflussen sie? Zum Beispiel (nur einige Beispiele zu haben, mit zu arbeiten), was ist der Unterschied zwischen en_US.8859-15, de_DE.8859-15, de_CH.8859-15und en_CU.8859-15? Alle haben genau den gleichen Zeichensatz, daher würden alle Textdateien, die ich in einem Editor meiner Wahl öffne, gleich aussehen. Was würde also passieren, wenn ich von einem "Pre-Charset-Code" zu einem anderen "Pre-Charset-Code" wechsle (wie von de_CHbis en_US)?

Gibt es Tabellen, in denen die Unterschiede in einer übersichtlichen Tabelle aufgelistet sind?

1

1 Antwort auf die Frage

2
Toby Speight

Die beiden Teile bilden einen Sprachcode nach ISO-639 . Der erste Teil ist die Sprache selbst, und der zweite ist (in der Regel) ein Ländercode, der die lokale Variante angibt.

Sie können die Auswirkungen von Änderungen LANGmit fast jedem Programm beobachten, das Übersetzungen enthält. LC_COLLATEbeeinflusst die Ergebnisse des sortProgramms; LC_DATEbeeinflusst die Ausgabe von dateund ls -l. Bei einigen Ländereinstellungen ist es möglich (sogar wahrscheinlich), dass Sie nichts installiert haben, das sie verwendet.

Auf den meisten Systemen wird nur LC_LANGfestgelegt, und alle anderen Einstellungen greifen auf das Erben zurück.

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

LC_COLLATE
Dies wird verwendet, um das Verhalten der Funktionen strcoll (3) und strxfrm (3) zu ändern, mit denen Zeichenfolgen im lokalen Alphabet verglichen werden. Zum Beispiel wird das deutsche scharfe s als "ss" sortiert.
LC_CTYPE
Dies ändert das Verhalten der Zeichenverarbeitungs- und -klassifikationsfunktionen wie isupper (3) und toupper (3) und der Multibyte-Zeichenfunktionen wie mblen (3) oder wctomb (3).
LC_MONETARY
ändert die von localeconv (3) zurückgegebenen Informationen, die die Art und Weise beschreiben, in der Zahlen normalerweise gedruckt werden, mit Details wie Dezimalpunkt und Dezimalpunkt. Diese Informationen werden intern von der Funktion strfmon (3) verwendet.
LC_MESSAGES
Änderungen, in denen die Sprachmeldungen angezeigt werden und wie eine positive oder negative Antwort aussieht. Die GNU C-Library enthält die Funktionen gettext (3), ngettext (3) und rpmatch (3), um die Verwendung dieser Informationen zu erleichtern. Die GNU-gettext-Funktionsfamilie gehorcht auch der Umgebungsvariablen LANGUAGE (die eine durch Doppelpunkte getrennte Liste von Gebietsschemas enthält), wenn die Kategorie auf ein anderes gültiges Gebietsschema als "C" gesetzt ist.
LC_NUMERIC
ändert die von der Funktionsfamilie printf (3) und scanf (3) verwendeten Informationen, wenn ihnen die Verwendung der Gebietsschema-Einstellungen empfohlen wird. Diese Informationen können auch mit der Funktion localeconv (3) gelesen werden.
LC_TIME
ändert das Verhalten der Strftime (3) -Funktion, um die aktuelle Uhrzeit in einer lokal akzeptablen Form anzuzeigen; Zum Beispiel verwendet der größte Teil Europas eine 24-Stunden-Uhr gegenüber der 12-Stunden-Uhr, die in den Vereinigten Staaten verwendet wird.
LC_ALL Alle oben genannten.