PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : locale Einstellungen korrigieren



xalvar
27.03.05, 10:58
Hallo Leute,

beim Installieren von so manchen Programmen erhalte ich folgende Warnung

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "de_DE:de:en_GB:en",
LC_ALL = "de",
LANG = "de_DE@euro"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Nach ein bissel Suchen bin ich natürlich darauf gestoßen dpkg-reconfigure locales und locale-gen auszuführen. Beide laufen auch ohne Fehlermeldung durch:

# locale-gen
Generating locales...
de_DE.ISO-8859-15@euro... done
de_DE.ISO-8859-1... done
de_DE.UTF-8@euro... done
de_DE.UTF-8... done
en_GB.ISO-8859-1... done
en_GB.ISO-8859-15... done
en_GB.UTF-8... done
Generation complete.
Jedoch ändert sich nichts an den Warnungen. Nach einer Erklärung zu den locales, die ich fand, ruft locale-gen "localedef" auf, welches eine locales Datei wie "de_DE" mit einer Charmap wie ISO-8859-15 übersetzt und ein Verzeichnis in /usr/share/locale anlegt. Nun, obwohl ich sowohl Charmaps als auch loceles-Dateien habe werden eben diese Verzeichnisse nicht angelegt:

# ls -l /usr/share/locale/
...
drwxr-xr-x 4 root root 4096 2005-03-18 15:46 de
drwxr-xr-x 3 root root 4096 2005-03-04 14:34 de_AT
drwxr-xr-x 3 root root 4096 2005-03-04 15:04 de.UTF-8
...
Dort müssten sich eigentlich auch de_DE Verzeichnisse befinden. Ein testweiser manueller Aufruf von localedef bringt etwas Licht ins Dunkel:

# localedef -v -f ISO-8859-15 -i de_DE de_TEST
/usr/share/i18n/locales/de_DE:7: non-symbolic character value should not be used
/usr/share/i18n/locales/de_DE:8: non-symbolic character value should not be used
...
/usr/share/i18n/locales/de_DE:29: non-symbolic character value should not be used
/usr/share/i18n/locales/de_DE:34: non-symbolic character value should not be used
/usr/share/i18n/locales/i18n:1107: non-symbolic character value should not be used
...
/usr/share/i18n/locales/i18n:1373: non-symbolic character value should not be used
/usr/share/i18n/locales/de_DE:38: non-symbolic character value should not be used
/usr/share/i18n/locales/de_DE:67: non-symbolic character value should not be used
/usr/share/i18n/locales/translit_neutral:10: non-symbolic character value should not be used
/usr/share/i18n/locales/translit_neutral:11: non-symbolic character value should not be used
...
/usr/share/i18n/locales/translit_neutral:17: non-symbolic character value should not be used
LC_NAME: Feld »name_gen« ist nicht definiert
LC_IDENTIFICATION: Feld »audience« ist nicht definiert
LC_IDENTIFICATION: Feld »application« ist nicht definiert
LC_IDENTIFICATION: Feld »abbreviation« ist nicht definiert
LC_IDENTIFICATION: no identification for category `LC_MEASUREMENT'
Es wurde keine Ausgabedatei erzeugt, weil Warnungen ausgegeben wurden

Das passiert bei allen Charmap-locales Kombinationen, die ich ausprobiert habe. Soweit ich das überprüfen konnte, scheinen die locales-Dateien standardkonform zu sein.

Witzigerweise scheint ein Teil meines Systems deutsch zu sein, sprich einige man-pages sind z.B. deutsch (sie auch obige Ausgabe von localedef). Hat einer eine Idee, wo das Problem liegen könnte?

Gruß, xalvar

PS: Mein System läuft mit Debian Sarge 2.6.8

IT-Low
27.03.05, 19:27
PS: Mein System läuft mit Debian Sarge 2.6.8

Na dann hilft eventuell ein Einfaches:

dpkg-reconfigure localeconf

xalvar
27.03.05, 20:28
Na dann hilft eventuell ein Einfaches:

dpkg-reconfigure localeconf

Nein, dpkg-reconfigure locales erstellt lediglich das Skript, welches von locale-gen abgearbeitet wird.

Edit: localeconf ist selbst kein Paket, sondern Bestandteil von locales

Edit2: Sorry, habe mich verlesen "localedef" ist selbst kein Paket. dpkg-reconfigure localeconf erlaubt nur das komfortable Auswählen der locale-Umgebungsvariablen. Die sind aber bereits richtig gesetzt - was fehlt sind eben die zugehörigen Verzeichnisse/Dateien (s.o.).

xalvar

exs
27.03.05, 22:59
perl ist nicht installiert. Bekomme den gleichen Fehler auf meinem slack wenn perl nicht installiert ist.

Obwohl.....?
Hm, mag sein, dass du die neuste Version von perl installieren musst.

Ansonsten mach mal ein
export LANG=de_DE@euro
export LC_ALL=de_DE@euro

xalvar
28.03.05, 00:32
perl ist nicht installiert. Bekomme den gleichen Fehler auf meinem slack wenn perl nicht installiert ist.

Obwohl.....?
Hm, mag sein, dass du die neuste Version von perl installieren musst.

Meine Perlversion war recht aktuell. Die allerneuste Version macht leider keinen Unterschied.



Ansonsten mach mal ein
export LANG=de_DE@euro
export LC_ALL=de_DE@euro

Die Umgebungsvariablen sind richtig gesetzt. Naja, zumindest in dem Sinn, dass die Sprache eingestellt ist, die ich gerne hätte. Meines Erachtens liegt das Problem aber nicht an fehlerhaften Einstellungen, sondern an dem Fehlen der binären locale-Dateien, die (bei mir) in /usr/share/locale/ zu finden sind:



# ls -l /usr/share/locale/
...
drwxr-xr-x 4 root root 4096 2005-03-18 15:46 de
drwxr-xr-x 3 root root 4096 2005-03-04 14:34 de_AT
drwxr-xr-x 3 root root 4096 2005-03-04 15:04 de.UTF-8
...
Dort müsste sich auch ein Verzeichnis "de_DE@euro" befinden (es gibt ja auch en_CA, en_GB, en_US, usw.), oder liege ich da falsch? Könntest du bitte sonst vielleicht einmal nachschauen, welche "de_*" Verzeichnisse bei dir vorhanden sind?

xalvar

exs
28.03.05, 00:58
Bei mir sind nur


#/usr/share/locale# ls | grep de
de
de.UTF-8

Ist aber n vserver mit ner Debiankiste drauf.

Installiere mal die glibc-i18n und gettext.

christophwth
28.03.05, 01:16
Hi

apt-get install language-env

set-language-env -l de

weiteres ist den man page zu entnehmen

gruss
christoph

xalvar
28.03.05, 11:52
language-env und gettext waren bereits installiert, ein glibc-i18n Paket kann ich nicht finden.

@christophwth: Ich hab set-language-env -l de ausgeführt, es scheint aber wiederrum nur einige Variablen zu setzen bzw. Programmen mitzuteilen, dass ich gern deutsch hätte. Leider behebt es weder die perl-warnungen beim Installieren neuer Programme noch ermöglicht es das Ausführen von localedef.

xalvar

christophwth
28.03.05, 21:22
Hi

nochmal der zusammenhang :

/etc/environment
LANG=de_DE@euro




/usr/share/locale ( verzeichnisse mit unterverzeichnissen )
de_AT
de.UTF-8
de_DE
de


der inhalt des de verzeichnisses :
rw-r--r-- 1 root root 357 1999-05-31 15:48 flag.png
-rw-r--r-- 1 root root 6 2000-01-29 21:51 charset
drwxr-xr-x 2 root root 4096 2004-07-17 15:14 LC_TIME
-rw-r--r-- 1 root root 1481 2004-10-03 09:18 entry.desktop
drwxr-xr-x 4 root root 4096 2005-02-05 00:42 .
drwxr-xr-x 122 root root 4096 2005-03-26 14:14 ..
drwxr-xr-x 2 root root 36864 2005-03-28 01:53 LC_MESSAGES



im verzeichnis de alle einstellugen in LC_MESSAGES mit .mo dateien




/usr/share/i18n/locales/
...
e_LU@euro
de_LU
de_DE@euro
de_DE
de_CH
de_BE@euro
de_BE
de_AT@euro
de_AT

/etc/locale.alias
..
german de_DE.ISO-8859-1

gruss
christoph

xalvar
30.03.05, 11:02
Hmm, so sieht's bei mir auch aus - mit der Ausnahme, dass ich kein de_DE Verzeichnis in /usr/share/locale habe.

Nochmal zur Vollständigkeit: Wenn ich es richtig verstanden habe, dann übersetzt localedef zeichen- und locale-Definitionsdateien aus /usr/share/i18n/ zu... naja, zu was eigentlich? Die locale-Definitionsdateien legen dabei Sachen fest wie Dezimalzeichen ist ein Komma, Währungszeichen ist € usw. und die charmap legt den Code des Zeichens fest. Das kann im Grundsatz ja aber nicht für eine vollständige Lokalisation des Systems verantwortlich sein, schließlich müssen dafür Nachrichten übersetzt werden (mo-Dateien?). Was genau bewirkt die dann Einstellung LANG=de_DE@euro? Legt das explizit die benutzte Zeichenkodierung auf ISO-8859-15 fest, oder benutzt das gespeicherte Zeichenkodierung in /usr/share/locale/de_DE@euro?

xalvar

christophwth
31.03.05, 22:31
Hi

ich habe es mir noch mal angeschaut dein localedef aufruf funktioniert bei mir.
es wird aber kein verzeichnis erzeugt.
möglicherweise fehlt ein teil der locales , hast du schon mal versucht die locales zu deinstallieren und neu zu installieren
( apt-get --purge remove locales)

ich habe auch noch mal in 2 sid systemen den aufruf der locale oder .mo dateien verglichen
mit strace -ogedit.start gedit

es werden die locales in der reichenfolge durchsucht wie angegben
bei gedit
/usr/lib/locale/locale-archive (wird geöffnet )
/usr/share/locale/locale.alias (wird geöffnet )
/usr/share/locale/de_DE@euro/LC_MESSAGES/gedit.mo (nicht vorhanden )
/usr/share/locale/de@euro/LC_MESSAGES/gedit.mo (nicht vorhanden )
/usr/share/locale/de/LC_MESSAGES/gedit.mo (wird geöffnet )

hier ist zu sehen dass zuerst versucht wird die datei im de_DE@euro verzeichnis zu finden
weil dort die datei nicht gefunden wird wird in de@euro gesucht. das verzeichnis existiert nicht
gefunden wird die datei nur in /usr/share/locale/de.
das selbe gilt auch für

/usr/share/locale/de/LC_MESSAGES/libgnome-2.0.mo

usw.

das bedeutet für ein grossteil der programme werden die dateien in /usr/share/locale/de verwendet.
nur für apt zusätzlich in de.UTF-8

für texinfo gibt es locales in de_AT

wo die zeichenkodierung noch festgelegt wird kann dir momentan leider auch nicht erklären.
ich weiss nur das ein aufruf wie
open("/usr/lib/gconv/ISO8859-15.so", O_RDONLY) = 3
anzeigt, dass iso8859-15 geladen wird.

gruss
christoph

tictactux
31.03.05, 22:58
Hi xalvar,


[CODE]perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "de_DE:de:en_GB:en",
LC_ALL = "de",
LANG = "de_DE@euro"
are supported and installed on your system.
so wie ich das sehe hast Du bereits alles was konfigurationsmäßig nötig ist,
aber du setzt falsche/widersprückliche Environment-Variablen.
Hatte ich auch schon mal.
Zum Test: setze alle obigen Variablen auf einen Wert, der auch laut /etc/locale.gen
erzeugt wurde (z.B. de_DE@euro) und starte dann das Perl-Programm
(ginge auch direkt mit: LANGUAGE=de_DE@euro perl-programm)
Übrigens: Du weißt, daß das LC_ALL fast alles andere überschreibt ?

HTH
Wolfgang