Hey Leute,
mein System hat sich an verschiedensten Stellen beschwert, dass die Spracheinstellungen nicht richtig sind. An und für sich funktioniert meistens alles, Ausnahmen sind z.B. Amarok, aber das hatten wir in einem anderen Thema ist hier nicht von Belang. Im Folgenden habe ich eine kleine Testreihe mit export-Befehlen gemacht, um euch zu zeigen, was ich herausfinden konnte. Wir alle wissen, dass diese Änderungen also nicht permanent sind, wir wissen genauso gut, dass wir die Änderungen mit z.B. localectl permanent machen könnten. Aber darum geht es mir hier nicht, wie ihr sehen werdet.
Ich teile die Testreihe in 3 Abschnitte ein. Ich rufe beispielhaft immer Firefox und Man auf, da ich von diesen sicher weiß, dass sie sich beschweren, wenn die Spracheinstellungen nicht richtig erkannt werden.
1. Default, so wie das System installiert wurde (en_GB bei Installation ausgewählt und gewünscht), hier führe ich auch einmalig locale -a aus mit Filter für die englischen Auswahlmöglichkeiten.
localhost:~ # firefox
(firefox:7155): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
localhost:~ # man localectl
man: can't set the locale; make sure $LC_* and $LANG are correct
localhost:~ # locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_GB.UTF-8
LC_CTYPE=en_GB.UTF-8
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION=en_GB.UTF-8,LANG=en_GB.UTF-8
LC_ALL=
localhost:~ # locale -a | grep en
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE@euro
en_IE.utf8
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SG
en_SG.utf8
en_US
en_US.iso885915
en_US.utf8
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
Alles anzeigen
2. Nachdem ich LC_ALL mit derselben Lokale "en_GB.UTF-8" überschreibe, die für alle anderen gesetzt war:
localhost:~ # export LC_ALL=en_GB.UTF-8
localhost:~ # firefox
localhost:~ # man localectl
localhost:~ # locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=en_GB.UTF-8
Alles anzeigen
Wie zu sehen ist beschweren sich plötzlich weder Firefox noch Man, allerdings kann LC_ALL wohl kaum die richtige Lösung des Problems sein, da es individuelle Konfigurationen von allen anderen LC_*-Variablen zunichte macht.
3. Mir viel auf, dass in der Ausgabe von locale -a alle UTF-Endungen klein geschrieben waren und nicht groß, wie in den LC_*-Variablen und LANG. Also habe ich das ganze mal mit kleinem utf-8 probiert:
localhost:~ # unset LC_ALL
localhost:~ # export LANG="en_GB.utf-8"
localhost:~ # export LC_CTYPE="en_GB.utf-8"
localhost:~ # export LC_NUMERIC="en_GB.utf-8"
localhost:~ # export LC_TIME="en_GB.utf-8"
localhost:~ # export LC_COLLATE="en_GB.utf-8"
localhost:~ # export LC_MONETARY="en_GB.utf-8"
localhost:~ # export LC_MESSAGES="en_GB.utf-8"
localhost:~ # export LC_PAPER="en_GB.utf-8"
localhost:~ # export LC_NAME="en_GB.utf-8"
localhost:~ # export LC_ADDRESS="en_GB.utf-8"
localhost:~ # export LC_TELEPHONE="en_GB.utf-8"
localhost:~ # export LC_MEASUREMENT="en_GB.utf-8"
localhost:~ # export LC_IDENTIFICATION="en_GB.utf-8"
localhost:~ # firefox
localhost:~ # man localectl
localhost:~ # locale
LANG=en_GB.utf-8
LC_CTYPE=en_GB.utf-8
LC_NUMERIC=en_GB.utf-8
LC_TIME=en_GB.utf-8
LC_COLLATE=en_GB.utf-8
LC_MONETARY=en_GB.utf-8
LC_MESSAGES=en_GB.utf-8
LC_PAPER=en_GB.utf-8
LC_NAME=en_GB.utf-8
LC_ADDRESS=en_GB.utf-8
LC_TELEPHONE=en_GB.utf-8
LC_MEASUREMENT=en_GB.utf-8
LC_IDENTIFICATION=en_GB.utf-8
LC_ALL=
Alles anzeigen
Und wie man sieht: Firefox und Man finden die Spracheinstellungen.
Nach unset LC_ALL habe ich übrigens nochmal überprüft: Es hat alle anderen Variablen wieder zurückgesetzt, so wie sie in (1) waren.
Also mit LC_ALL ist es wohl in Ordnung, wenn das UTF-8 groß geschrieben ist. Andernfalls muss ich die Endungen klein schreiben, damit alles ohne Fehlermeldungen funktioniert. Ich hab zwischendurch noch ein wenig Belesung im opensuse.org Forum betrieben, in diesem Thread war es scheinbar egal, ob die Endungen für UTF-8 in den Variablen groß geschrieben waren. Auch dort waren die Endungen der locale -a-Ausgabe klein. Das widerspricht der Beobachtung auf meinem System und führt mich zur Frage:
Gibt es irgendwo eine Konfiguration, die das ganze auf "Ignore-Case" setzt, habe ich hier einen Bug gefunden oder ist dieses Verhalten gewollt? Linux ist ja im großen und ganzen Case-Sensitiv...
Auch wenn es wohl offensichtlich ist, möchte ich es nochmal erwähnen: Das Verhalten ist auf meinem System jederzeit 100% reproduzierbar.
Falls es ein Bug ist, würde mich auch interessieren an wen der adressiert werden sollte, da ich mir nicht sicher bin ob das z.B. ein openSUSE-spezifisches oder eher ein glibc-locale Problem ist, damit ich ihn an die richtige Stelle melden kann.
lg.
Antarctris