Auf was soll ich mein Gebietsschema einstellen und was bedeutet das?

19

Diese Frage wurde angeregt durch die Frage, ob der Chromium-Browser das Festlegen der Standardpapiergröße für "In Datei drucken" nicht zulässt , und durch ein Gespräch mit @Gilles im Chat. Wie von @don_crissti hervorgehoben und von mir bestätigt, wirkt sich das Ändern des Gebietsschemas (zumindest LC_PAPER) auf das ausgewählte Papierformat aus.

Ich hatte nie viel darüber nachgedacht, was ich auswählen sollte, und war immer mitgegangen, en_US.UTF-8weil es eine vernünftige Standardauswahl zu sein schien.

Allerdings per @Gilles im Chat (siehe Unterhaltung ab http://chat.stackexchange.com/transcript/message/17017095#17017095 ). Auszüge:

Gilles: LC_PAPER ist standardmäßig $ LANG

Gilles: Sie müssen LANG = en_US.UTF-8 haben. Das ist eine schlechte Idee: Es setzt LC_COLLATE und das ist fast immer eine schlechte Sache

Gilles: LC_COLLATE beschreibt nicht die korrekte Sortierung, es ist zu restriktiv (es geht zeichenweise), entfernen Sie LANG und setzen Sie stattdessen LC_CTYPE und LC_PAPER

Gilles: plus LC_MESSAGES, wenn Sie Nachrichten in einer anderen Sprache als Englisch wünschen

Natürlich gibt es hier Probleme, die mir nicht bewusst sind, und ich bin mir sicher, dass es auch viele andere sind. Welche Aspekte sollten Sie beim Festlegen von Gebietsschemas berücksichtigen und wie sollten Sie sie festlegen? Ich bin immer nur dpkg-reconfigure localesin Debian gelaufen und habe nicht zweimal darüber nachgedacht.

Spezielle Frage: Soll ich mein Gebietsschema auf en_IN.UTF-8 setzen? Gibt es Nachteile?

Siehe auch: Beeinflusst (sollte) LC_COLLATE Zeichenbereiche?

Faheem Mitha
quelle

Antworten:

29

Ländereinstellungen sind Benutzereinstellungen, die sich auf Ihre Kultur beziehen.

Gebietsschemanamen

Bei allen aktuellen Unix-Varianten, die ich kenne (aber nicht bei einigen Antiquitäten), folgen die Gebietsschemennamen demselben Muster:

  • Ein Sprachcode mit zwei Kleinbuchstaben nach ISO 639-1 oder ein Sprachcode mit drei Buchstaben nach ISO 639-2, wenn die Sprache keinen Code mit zwei Buchstaben enthält. Zum Beispiel enfür Englisch, defür Deutsch, jafür Japanisch, ukfür Ukrainisch, berfür Berber,…
  • Für viele, aber nicht alle Sprachen ein Unterstrich _gefolgt von einem zweibuchstabigen ISO 3166 -Ländercode in Großbuchstaben. Also: en_USfür US-Englisch, en_UKfür britisches Englisch, fr_CAkanadisches (Québec) Französisch, de_DEfür Deutsch von Deutschland, de_ATfür Deutsch von Österreich, ja_JPfür Japanisch (von Japan) usw.
  • Optional kann ein Punkt , .gefolgt von dem Namen eines Zeichencodierung wie UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5, etc. Mit GNU libc zumindest (ich weiß nicht , wie weit verbreitet das ist), Fall und Zeichensetzung bei der Codierung Namen ignoriert. Beispiel: zh_CN.UTF-8Ist in UTF-8 Mandarin (vereinfachtes) Chinesisch, in zh_CNGB2312 Mandarin-Chinesisch und zh_TWin Big5 taiwanesisches (traditionelles) Chinesisch.
  • Optional ein at-Zeichen @gefolgt vom Namen einer Variante. Die Bedeutung von Varianten ist vom Gebietsschema abhängig. In vielen europäischen Ländern gibt es beispielsweise eine @euroGebietsschemavariante, in der das Währungszeichen "€" lautet und die dieses Zeichen enthält (ISO 8859-15 oder ISO 8859-16), im Gegensatz zur schmucklosen Variante mit dem älteren Währungszeichen. Beispielsweise verwendet en_IE(Englisch, Irland) die Kodierung latin1 (ISO 8859-1) und £ als Währungssymbol, während en_IE@eurodie Kodierung latin9 (ISO 8859-15) und € als Währungssymbol verwendet werden.

Außerdem gibt es auf allen Unix-ähnlichen Systemen zwei Gebietsschemanamen: Cund POSIX. Diese Namen sind synonym und bedeuten Computerese, dh Standardeinstellungen, die für Daten geeignet sind, die von einem Computerprogramm analysiert werden.

Gebietsschemaeinstellungen

Die folgenden Gebietsschemakategorien werden von POSIX definiert :

  • LC_CTYPE: Der von Terminalanwendungen verwendete Zeichensatz: Klassifizierungsdaten (welche Zeichen sind Buchstaben, Interpunktion, Leerzeichen, ungültig usw.) und Groß- / Kleinschreibung. Textdienstprogramme beachten normalerweise LC_CTYPE, um Zeichengrenzen zu bestimmen.
  • LC_COLLATE: Sortierreihenfolge. Diese Einstellung ist aus mehreren Gründen nur sehr eingeschränkt verwendbar:
    • Die meisten Sprachen haben komplizierte Regeln, die davon abhängen, was sortiert wird (z. B. verwenden Wörterbuchwörter und Eigennamen möglicherweise nicht dieselbe Reihenfolge) und können nicht durch ausgedrückt werden LC_COLLATE.
    • Es gibt nur wenige Anwendungen, bei denen die richtige Sortierreihenfolge von Software ausgeführt wird, die Gebietsschemaeinstellungen verwendet. Beispielsweise speichern Textverarbeitungsprogramme die Sprache und Codierung einer Datei in der Datei selbst (andernfalls würde die Datei auf einem System mit unterschiedlichen Gebietsschemaeinstellungen nicht korrekt verarbeitet) und kümmern sich nicht um die von der Umgebung angegebenen Gebietsschemaeinstellungen.
    • LC_COLLATEkann böse Nebenwirkungen haben, insbesondere, weil dadurch die Sortierreihenfolge A <a <B <... verursacht wird, bei der "zwischen A und Z" die Kleinbuchstaben a bis y enthält. Insbesondere sehr häufig verwendete reguläre Ausdrücke wie [A-Z]break setzen einige Anwendungen außer Kraft .
  • LC_MESSAGES: die Sprache der Informations- und Fehlermeldungen.
  • LC_NUMERIC: Zahlenformatierung: Dezimal- und Tausendertrennzeichen.
    Viele Anwendungen codieren hart .als Dezimaltrennzeichen. Dies macht LC_NUMERICnicht sehr nützlich und potenziell gefährlich:
    • Auch wenn Sie es einstellen, wird das Standardformat häufig angezeigt.
    • Es ist wahrscheinlich, dass eine Anwendung eine vom Gebietsschema abhängige Ausgabe erzeugt und eine andere Anwendung .den Dezimalpunkt oder ,ein Feldtrennzeichen erwartet .
  • LC_MONETARY: wie LC_NUMERIC, aber für Beträge in lokaler Währung.
    Sehr wenige Anwendungen verwenden dies.
  • LC_TIME: Datums- und Uhrzeitformatierung: Wochentags- und Monatsnamen, 12- oder 24-Stunden-Uhr, Reihenfolge der Datumsteile, Zeichensetzung usw.

GNU libc, das Sie unter nicht eingebettetem Linux finden, definiert zusätzliche Gebietsschemakategorien:

  • LC_PAPER: Das Standardpapierformat (definiert durch Höhe und Breite).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: Ich weiß nicht , von jeder Anwendung , die diese verwendet.

Umgebungsvariablen

Anwendungen, die Gebietsschemaeinstellungen verwenden, ermitteln diese anhand von Umgebungsvariablen.

  • Dann wird der Wert der LANGUmgebungsvariablen verwendet, sofern er nicht von einer anderen Einstellung überschrieben wird. Ist dies LANGnicht der Fall, lautet das Standardgebietsschema C.
  • Die LC_xxxNamen können als Umgebungsvariablen verwendet werden.
  • Wenn LC_ALLgesetzt, werden alle anderen Werte ignoriert. Dies ist in erster Linie nützlich, um LC_ALL=CAusführungsanwendungen festzulegen, die unabhängig von ihrem Ausführungsort die gleiche Ausgabe erzeugen müssen.
  • Darüber hinaus libc GNU AnwendungenLANGUAGE definieren Fallbacks für LC_MESSAGES(zB LANGUAGE=fr_BE:fr_FR:enBelgisches Französisch zu bevorzugen, oder wenn nicht verfügbar Frankreich Französisch, oder wenn nicht verfügbar Englisch).

Sprachumgebungen installieren

Da die Gebietsschemadaten sehr umfangreich sein können, werden sie bei einigen Distributionen nicht in einer verwendbaren Form ausgeliefert, sondern erfordern einen zusätzlichen Installationsschritt.

  • Führen Sie unter Debian zum Installieren von Gebietsschemas dpkg-reconfigure localesaus der Liste im Dialogfeld aus, oder bearbeiten Sie sie /etc/locale.genund führen Sie sie aus locale-gen.
  • Führen Sie unter Ubuntu zum Installieren von Gebietsschemas locale-gendie Namen der Gebietsschemas als Argumente aus.

Sie können Ihr eigenes Gebietsschema definieren .

Empfehlung

Die nützlichen Einstellungen sind:

  • Stellen Sie LC_CTYPEauf die Sprache und Codierung , die Sie in Ihren Text - Dateien zu kodieren. Stellen Sie sicher , dass Ihre Endgeräte , die Codierung verwenden.
    Für die meisten Sprachen ist nur die Kodierung von Bedeutung. Es gibt einige Ausnahmen; beispielsweise ein Groß iist Iin den meisten Sprachen , aber İin Türkisch ( tr_TR).
  • Stellen Sie LC_MESSAGESdie Sprache ein, in der Sie Nachrichten sehen möchten.
  • Stellen Sie diese Option ein LC_PAPER, en_USwenn Sie möchten, dass US Letter das Standardpapierformat ist, und fast alles andere (z. B. en_GB), wenn Sie A4 möchten.
  • Optional können Sie LC_TIMEIhr bevorzugtes Zeitformat einstellen .

Vermeiden Sie, wie oben erläutert, die Einstellung LC_COLLATEund LC_NUMERIC. Wenn Sie verwenden LANG, überschreiben Sie diese beiden Kategorien explizit, indem Sie sie auf festlegen C.

Gilles 'SO - hör auf böse zu sein'
quelle
Hallo Gilles, danke für die ausführliche Antwort. Wo ist ein guter Ort, um die Standardeinstellungen unter Debian zu überschreiben? Da ich ein A4-Papierformat benötige, muss ich wohl den Standardwert von überschreiben LC_PAPER. Und kann ich dies systemweit aktualisieren, ohne neu zu starten?
Faheem Mitha
1
@FaheemMitha Was ist der beste distro- / shellunabhängige Weg, um Umgebungsvariablen zu setzen? Und wenn Sie es systemweit auf Debian einstellen möchten, gibt es auch /etc/default/locale. Diese Dateien werden beim Anmelden wirksam. Sie können export LC_PAPER=…in einer Shell Befehle beeinflussen, die von dieser Shell aus gestartet werden.
Gilles 'SO - hör auf böse zu sein'