Diese Frage wurde angeregt durch das Stellen der Frage
Chromium browser does not allow set the default paper size for „Print to File“ und auch durch ein Gespräch mit @Gilles im Chat. Wie von @don_crissti aufgezeigt und von mir verifiziert, ändert das Gebietsschema (mindestens LC_PAPER
) macht einen Unterschied in der Auswahl des Papierformats.
Ich hatte nie viel darüber nachgedacht, was ich auswählen sollte, und mich immer für en_US.UTF-8
entschieden weil es wie eine vernünftige Standardauswahl erschien.
Allerdings per @Gilles im Chat (siehe Konversation 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 keine korrekte Sortierung, es ist zu
restriktiv (es geht Zeichen für Zeichen). LANG entfernen und stattdessen
LC_CTYPE und LC_PAPER setzen
Gilles:plus LC_MESSAGES, wenn Sie Nachrichten in einer anderen Sprache als
Englisch
Natürlich gibt es hier Probleme, die mir nicht bekannt sind, und ich bin sicher, dass es vielen anderen ebenso geht. Welche Probleme sollten Sie also beim Festlegen von Gebietsschemas berücksichtigen und wie sollten Sie sie festlegen? Ich habe immer nur dpkg-reconfigure locales
ausgeführt in Debian, und nicht zweimal darüber nachgedacht.
Spezifische Frage:Soll ich mein Gebietsschema auf en_IN.UTF-8 setzen? Gibt es Nachteile?
Akzeptierte Antwort:
Gebietsschemaeinstellungen sind Benutzereinstellungen, die sich auf Ihre Kultur beziehen.
Lokale Namen
Bei allen aktuellen Unix-Varianten, die ich kenne (aber nicht bei einigen Antiquitäten), folgen Gebietsschemanamen demselben Muster:
- Ein aus zwei Buchstaben bestehender ISO 639-1-Sprachcode oder ein aus drei Buchstaben bestehender ISO 639-2-Sprachcode, wenn die Sprache keinen aus zwei Buchstaben bestehenden Code hat. Beispiel:
en
für Englischde
für Deutschja
für Japanischuk
für Ukrainischber
für Berber, … - Für viele, aber nicht alle Sprachen, ein Unterstrich
_
gefolgt von einem aus zwei Buchstaben bestehenden ISO 3166-Ländercode in Großbuchstaben. Also:en_US
für US-Englischen_UK
für britisches Englischfr_CA
Kanadisches (Québec) Französisch,de_DE
für Deutsch von Deutschland,de_AT
für Deutsch von Österreich,ja_JP
für Japanisch (aus Japan) usw. - Optional ein Punkt
.
gefolgt vom Namen einer Zeichenkodierung wieUTF-8
,ISO-8859-1
,KOI8-U
,GB2312
,Big5
usw. Zumindest bei GNU libc (ich weiß nicht, wie verbreitet das ist) werden Groß- und Kleinschreibung und Satzzeichen bei der Codierung von Namen ignoriert. Beispiel:zh_CN.UTF-8
ist Mandarin (vereinfachtes) Chinesisch, kodiert in UTF-8, währendzh_CN
ist Mandarin-Chinesisch, kodiert in GB2312, undzh_TW
ist taiwanesisches (traditionelles) Chinesisch, das in Big5 codiert ist. - Optional ein at-Zeichen
@
gefolgt vom Namen einer Variante. Die Bedeutung von Varianten ist vom Gebietsschema abhängig. Beispielsweise haben viele europäische Länder einen@euro
Gebietsschemavariante, bei der das Währungszeichen € ist und die Codierung dieses Zeichen enthält (ISO 8859-15 oder ISO 8859-16), im Gegensatz zur schlichten Variante mit dem älteren Währungszeichen. Beispiel:en_IE
(Englisch, Irland) verwendet die Codierung latin1 (ISO 8859-1) und £ als Währungssymbol, während[email protected]
verwendet die Kodierung Latin9 (ISO 8859-15) und € als Währungssymbol.
Außerdem gibt es zwei Locale-Namen, die auf allen Unix-ähnlichen Systemen existieren:C
und POSIX
. Diese Namen sind synonym und bedeuten computeresisch, d. h. Standardeinstellungen, die für Daten geeignet sind, die von einem Computerprogramm geparst werden.
Lokale Einstellungen
Die folgenden Locale-Kategorien werden von POSIX definiert:
LC_CTYPE
:der von Terminalanwendungen verwendete Zeichensatz:Klassifikationsdaten (welche Zeichen sind Buchstaben, Satzzeichen, Leerzeichen, ungültige Zeichen usw.) und Fallumwandlung. Textdienstprogramme beachten normalerweiseLC_CTYPE
Charaktergrenzen zu bestimmen.LC_COLLATE
:Sortierreihenfolge (d. h. Sortierreihenfolge). Diese Einstellung ist aus mehreren Gründen von sehr begrenztem Nutzen:- 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
LC_COLLATE
ausgedrückt werden . - Es gibt nur wenige Anwendungen, bei denen es auf die richtige Sortierreihenfolge ankommt, die von Software ausgeführt werden, die Gebietsschemaeinstellungen verwendet. Beispielsweise speichern Textverarbeitungsprogramme die Sprache und Kodierung einer Datei in der Datei selbst (andernfalls würde die Datei auf einem System mit anderen Gebietsschemaeinstellungen nicht korrekt verarbeitet) und kümmern sich nicht um die von der Umgebung festgelegten Gebietsschemaeinstellungen.
LC_COLLATE
kann unangenehme Nebenwirkungen haben, insbesondere weil es die Sortierreihenfolge A [A-Z] brechen einige Anwendungen.
- 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
LC_MESSAGES
:die Sprache der Informations- und Fehlermeldungen.LC_NUMERIC
:Zahlenformatierung:Dezimal- und Tausendertrennzeichen.
Viele Anwendungen haben.
fest codiert als Dezimaltrennzeichen. Das machtLC_NUMERIC
nicht sehr nützlich und potentiell gefährlich:- Selbst wenn Sie es festlegen, sehen Sie immer noch ziemlich oft das Standardformat.
- Sie werden wahrscheinlich in eine Situation geraten, in der eine Anwendung eine vom Gebietsschema abhängige Ausgabe erzeugt und eine andere Anwendung
.
erwartet als Dezimalpunkt oder,
ein Feldtrenner sein.
LC_MONETARY
:wieLC_NUMERIC
, aber für Beträge in lokaler Währung.
Sehr wenige Anwendungen verwenden dies.LC_TIME
:Datums- und Zeitformatierung:Wochentags- und Monatsnamen, 12- oder 24-Stunden-Uhr, Reihenfolge der Datumsteile, Satzzeichen usw.
GNU libc, die Sie auf nicht eingebettetem Linux finden, definiert zusätzliche Gebietsschemakategorien:
LC_PAPER
:die Standardpapiergröße (definiert durch Höhe und Breite).LC_NAME
,LC_ADDRESS
,LC_TELEPHONE
,LC_MEASUREMENT
,LC_IDENTIFICATION
:Mir ist keine Anwendung bekannt, die diese verwendet.
Umgebungsvariablen
Anwendungen, die Gebietsschemaeinstellungen verwenden, ermitteln diese anhand von Umgebungsvariablen.
- Dann der Wert von
LANG
Die Umgebungsvariable wird verwendet, sofern sie nicht durch eine andere Einstellung überschrieben wird. WennLANG
nicht festgelegt ist, ist das StandardgebietsschemaC
. - Der
LC_xxx
Namen können als Umgebungsvariablen verwendet werden. - Falls
LC_ALL
gesetzt ist, werden alle anderen Werte ignoriert; dies ist hauptsächlich nützlich, umLC_ALL=C
zu setzen Ausführen von Anwendungen, die dieselbe Ausgabe erzeugen müssen, unabhängig davon, wo sie ausgeführt werden. - Außerdem verwendet GNU libc
LANGUAGE
um Fallbacks fürLC_MESSAGES
zu definieren (z. B.LANGUAGE=fr_BE:fr_FR:en
belgisches Französisch oder, falls nicht verfügbar, französisches Französisch, oder falls nicht verfügbar, Englisch).
Locales installieren
Gebietsschemadaten können umfangreich sein, daher werden sie von einigen Distributionen nicht in verwendbarer Form ausgeliefert und erfordern stattdessen einen zusätzlichen Installationsschritt.
- Um unter Debian Locales zu installieren, führen Sie
dpkg-reconfigure locales
aus und wählen Sie aus der Liste im Dialogfeld aus oder bearbeiten Sie/etc/locale.gen
und führen Sie dannlocale-gen
aus . - Um unter Ubuntu Locales zu installieren, führen Sie
locale-gen
aus mit den Namen der Locales als Argumente.
Sie können Ihr eigenes Gebietsschema definieren.
Empfehlung
Die nützlichen Einstellungen sind:
- Setzen Sie
LC_CTYPE
an die Sprache und Codierung an, in der Sie Ihre Textdateien codieren. Stellen Sie sicher, dass Ihre Terminals diese Codierung verwenden.
Für die meisten Sprachen ist nur die Codierung von Bedeutung. Es gibt ein paar Ausnahmen; zum Beispiel ein großesi
istI
in den meisten Sprachen, aberİ
auf Türkisch (tr_TR
). - Setzen Sie
LC_MESSAGES
auf die Sprache, in der Sie Nachrichten sehen möchten. - Setzen Sie
LC_PAPER
zuen_US
wenn Sie möchten, dass US Letter das Standardpapierformat ist und so ziemlich alles andere (z. B.en_GB
), wenn Sie A4 möchten. - Legen Sie optional
LC_TIME
fest in Ihr bevorzugtes Zeitformat.
Wie oben erklärt, vermeiden Sie die Einstellung von LC_COLLATE
und LC_NUMERIC
. Wenn Sie LANG
verwenden , überschreiben Sie diese beiden Kategorien explizit, indem Sie sie auf C
setzen .