Ich habe die Lokalisierungsdateien en_US.utf8 , et_EE.iso88591 und ru_RU.utf8 generiert . Wenn ich versuche, eine der Locale-Variablen in eine ru_RU.utf8 oder en_US.utf8 zu ändern , hat dies keine Auswirkung:
# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
#
Wenn ich jedoch die Variable LANG = ändere , nehmen alle anderen Variablen außer LANGUAGE = und LC_ALL = den Wert der Variablen LANG = . Gibt es eine Möglichkeit, jede Gebietsschemavariable separat zu ändern? Stimmt es außerdem, dass Gebietsschemavariablen keine regulären Shell-Variablen sind, sondern eher Parameter für das Dienstprogramm locale darstellen ?
quelle
LANG
undLC_xxx
sind Umgebungsvariablen? Meine Tests zeigen, dass nurLANG
undLANGUAGE
undLC_MESSAGES
undLC_ALL
Umgebungsvariablen sind, während andere Variablen Umgebungsvariablen mögenLC_CTYPE
undLC_MONETARY
nicht sind (auch, sie sind keine Shell-Variablen)?env LC_TIME=en_GB date
mitenv LC_TIME=fr_FR date
undenv PATH="$PATH" date
(wählen Sie natürlich die auf Ihrem System vorhandenen Gebietsschemas aus). Offensichtlich kann jede Variable in der Umgebung eines bestimmten Prozesses festgelegt sein oder nicht. Welche Tests haben Sie durchgeführt? Sind Sie sicher, dass sich die von Ihnen verwendete Anwendung je nachLC_CTYPE
(ziemlich häufig) undLC_MONETARY
(ziemlich selten) anders verhält ?printenv
Befehl ausgeführt, um die Umgebungsvariablen von bash aufzulisten, und nurLANG
undLANGUAGE
undLC_MESSAGES
undLC_ALL
wurden als Umgebungsvariablen aufgeführt. Ich habe auch den Befehlset -o posix
gefolgt von dem Befehl ausgeführtset
, um die Umgebungsvariablen und die Shell-Variablen von bash abzurufen, und nurLANG
undLANGUAGE
undLC_MESSAGES
undLC_ALL
wurden aufgelistet. Das bedeutet also, dassLANG
undLANGUAGE
undLC_MESSAGES
undLC_ALL
Umgebungsvariablen sind und die übrigen Gebietsschemavariablen nicht und auch keine Shellvariablen.LANG
,LANGUAGE
,LC_MESSAGES
undLC_ALL
. (Entweder haben Sie dies explizit getan oder Ihre Distribution oder Ihr Systemadministrator haben es für Sie getan.) Sie können eine Umgebungsvariable mit einem beliebigen (syntaktisch gültigen) Namen festlegen! Einige Namen sind jedoch für eine bestimmte Anwendung von Bedeutung, andere nicht.LC_MESSAGES
,LC_CTYPE
,LC_TIME
Und so weiter von Anwendungen verwendet , die über die Sprache der Fehlermeldungen kümmern, die Zeichencodierung, das Zeitformat, und so weiter.LC_ALL
überschreibt alle anderen Einstellungen, sodass der Wert der anderen Gebietsschemavariablen keine Rolle spielt. Es wird normalerweise nur vorübergehend verwendet, um ein Programm zur Verwendung eines bestimmten Gebietsschemas zu zwingen. Es macht keinen Sinn, es in Ihrer normalen Umgebung zu haben.Unter den Fedora / CentOS / RHEL-basierten Distributionen können Sie meines Erachtens die Ländereinstellung in eine der angezeigten Ländereinstellungen ändern, wenn Sie den
locale -a
Befehl in dieser Systemdatei ausführen :Zum Beispiel auf meinem Fedora 14-System:
Unter GNOME können Sie die Hilfe-App ausführen:
Welche bringt diese GUI auf:
Ich denke, dass es für die Debian / Ubuntu-Distributionen etwas anders ist. Ich glaube, es ist diese Datei:
Ich glaube, sie sind Umgebungsvariablen, aber nicht ganz sicher, wie Anwendungen sie verwenden, wenn überhaupt.
Verweise
quelle
Beachten Sie, dass mindestens in RedHat 6, wenn LC_ALL festgelegt ist, das Festlegen anderer LC_ * -Umgebungsvariablen keine Auswirkungen hat, da LC_ALL Vorrang vor allen anderen LC_ * -Umgebungsvariablen hat.
quelle
In Debian-Systemen kann
dpkg-reconfigure locales
man die Hauptsprache festlegen und andere zur Verfügung stellen. Dann kann man ausführenupdate-locale
, um dieLANGUAGE
Umgebungsvariable/etc/default/locale
auf Ersatzsprachen zu setzen.quelle
dpkg-reconfigure locales
, notlocale