# [solved] Probleme mit locales/UTF-8/Umlauten

## Yminus

Hallo,

mein Problem habe ich bereits im englischen Forum geschildert, aber leider konnte mir dort niemand helfen. Also noch mal auf deutsch:

Ich habe  versucht die Locales meines Systems gemäß der Gentoo Anleitung einzurichten.

Meine /etc/env.d/02locale sieht folgendermaßen aus:

```
LC_CTYPE="de_DE.utf8@euro"

LC_NUMERIC="de_DE.utf8@euro"

LC_TIME="de_DE.utf8@euro"

LC_COLLATE="C"

LC_MONETARY="de_DE.utf8@euro"

LC_MESSAGES="en_US.utf8@euro"

LC_PAPER="de_DE.utf8@euro"

LC_NAME="de_DE.utf8@euro"

LC_ADDRESS="de_DE.utf8@euro"

LC_TELEPHONE="de_DE.utf8@euro"

LC_MEASUREMENT="de_DE.utf8@euro"

LC_IDENTIFICATION="de_DE.utf8@euro"

#LC_ALL="de_DE.utf8@euro"

LANG="de_DE.utf8@euro"

LANGUAGE="de_DE:de:en_GB:en"
```

Zunächst hatte ich Probleme damit, dass die Locale "de_DE.utf8@euro" auf meinem System fehlte und habe diese in meine /etc/locale.gen eingetragen. Die Datei enthält nun folgende Locales:

```
en_US ISO-8859-1

en_US.UTF-8 UTF-8

en_US.utf8@euro UTF-8

de_DE ISO-8859-1

de_DE.UTF-8 UTF-8

de_DE@euro ISO-8859-15

de_DE.UTF-8@euro UTF-8
```

Jetzt konnte ich die Locales genererieren:

```
 # locale-gen

 * Generating 8 locales (this might take a while) with 1 jobs

 *  (1/8) Generating en_US.ISO-8859-1 ...                                                                              [ ok ]

 *  (2/8) Generating en_US.UTF-8 ...                                                                                   [ ok ]

 *  (3/8) Generating en_US.utf8.UTF-8@euro ...                                                                         [ ok ]

 *  (4/8) Generating de_DE.ISO-8859-1 ...                                                                              [ ok ]

 *  (5/8) Generating de_DE.UTF-8 ...                                                                                   [ ok ]

 *  (6/8) Generating de_DE.ISO-8859-15@euro ...                                                                        [ ok ]

 *  (7/8) Generating de_DE.UTF-8.UTF-8@euro ...                                                                        [ ok ]

 *  (8/8) Generating de_DE.utf8.UTF-8@euro ...                                                                         [ ok ]

 * Generation complete
```

Danach habe ich 

```
 # env-update && source /etc/profile

>>> Regenerating /etc/ld.so.cache...
```

ausgeführt und folgende Antwort bekommen:

```
 # locale

LANG=de_DE.utf8@euro

LC_CTYPE="de_DE.UTF-8@euro"

LC_NUMERIC="de_DE.UTF-8@euro"

LC_TIME="de_DE.UTF-8@euro"

LC_COLLATE="de_DE.UTF-8@euro"

LC_MONETARY="de_DE.UTF-8@euro"

LC_MESSAGES="de_DE.UTF-8@euro"

LC_PAPER="de_DE.UTF-8@euro"

LC_NAME="de_DE.UTF-8@euro"

LC_ADDRESS="de_DE.UTF-8@euro"

LC_TELEPHONE="de_DE.UTF-8@euro"

LC_MEASUREMENT="de_DE.UTF-8@euro"

LC_IDENTIFICATION="de_DE.UTF-8@euro"

LC_ALL=de_DE.UTF-8@euro
```

Diese Ausgabe stimmt aber nicht mit meiner /etc/env.d/02locale überein:

```
LC_COLLATE="C" 

LC_MESSAGES="en_US.utf8@euro"
```

Mein System ist nun vollständig durcheinander. Wenn ich neu starte, bekomme ich in der Konsole sowohl als einfacher Nutzer, als auch als root folgende korrekte Locales angezeigt:

```
LANG=de_DE.utf8@euro

LC_CTYPE=de_DE.UTF-8@euro

LC_NUMERIC=de_DE.UTF-8@euro

LC_TIME=de_DE.UTF-8@euro

LC_COLLATE=C

LC_MONETARY=de_DE.UTF-8@euro

LC_MESSAGES=en_US.UTF-8@euro

LC_PAPER=de_DE.UTF-8@euro

LC_NAME=de_DE.UTF-8@euro

LC_ADDRESS=de_DE.UTF-8@euro

LC_TELEPHONE=de_DE.UTF-8@euro

LC_MEASUREMENT=de_DE.UTF-8@euro

LC_IDENTIFICATION=de_DE.UTF-8@euro

LC_ALL=
```

Wenn ich mich in e17 einlogge und in einen Xterm die Locales überprüfe, bekomme ich als einfacher Nutzer sowie nach "su" folgende Ausgabe: 

```
LANG=de_DE.utf8@euro

LC_CTYPE="de_DE.UTF-8@euro"

LC_NUMERIC="de_DE.UTF-8@euro"

LC_TIME="de_DE.UTF-8@euro"

LC_COLLATE="de_DE.UTF-8@euro"

LC_MONETARY="de_DE.UTF-8@euro"

LC_MESSAGES="de_DE.UTF-8@euro"

LC_PAPER="de_DE.UTF-8@euro"

LC_NAME="de_DE.UTF-8@euro"

LC_ADDRESS="de_DE.UTF-8@euro"

LC_TELEPHONE="de_DE.UTF-8@euro"

LC_MEASUREMENT="de_DE.UTF-8@euro"

LC_IDENTIFICATION="de_DE.UTF-8@euro"

LC_ALL=de_DE.UTF-8@euro
```

Dies lässt sich auch durch ein "env-update", "source /etc/profile" nicht beheben.

Meine Locales scheine nun auf dem kompletten System durcheinander. Gebe ich im Xterm ein Umlaut ein, wird dieses als Doppellaut dargestellt, also z.B "ae" an Stelle von "ä"

In KDE Anwendungen, wie z.B. kwrite, krusader, ... werden Umlaute so dargestellt:

"Ã€" an Stelle von "ä"

In Firefox, SciTE und anderen GTK Anwendungen werden Umlaute korrekt angezeigt.

Ich weiß echt nicht mehr weiter. Ich verstehe z.B. nicht wieso die Locales auf der Konsole andere sind als unter X. Und ich verstehe nicht, warum KDE(QT) Anwendungen sich anders verhalten, als GTK Anwendungen. Wie werden die Locales zur Laufzeit gesetzt? Kann es sein, dass mein Login Manager (Entrance) oder der Window Manager (Enlightenment 17) das Problem verursachen?Last edited by Yminus on Wed Feb 25, 2009 4:25 pm; edited 2 times in total

----------

## Yminus

Habe eben einen weiteren Thread zum Thema gefunden. Folgendes habe ich nun noch überprüft:

```
emerge -vp kde-i18n         

WARNING: One or more repositories have missing repo_name entries:

   /usr/local/portage/profiles/repo_name

NOTE: Each repo_name entry should be a plain text file containing a

unique name for the repository on the first line.

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R   ] kde-base/kde-i18n-3.5.9  USE="xinerama -arts -debug -kdeenablefinal" LINGUAS="de -af -ar -az -bg -bn -br -bs -ca -cs -csb -cy -da -el -en_GB -eo -es -et -eu -fa -fi -fr -fy -ga -gl -he -hi -hr -hu -is -it -ja -kk -km -ko -lt -lv -mk -mn -ms -nb -nds -nl -nn -pa -pl -pt -pt_BR -ro -ru -rw -se -sk -sl -sr -sr@Latn -ss -sv -ta -te -tg -th -tr -uk -uz -vi -wa -zh_CN -zh_TW" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB
```

```
 grep LINGUAS /etc/make.conf 

LINGUAS="de en"
```

Mit OpenOffice hab ich keine Probleme, kde-4 Anwendungen habe ich soweit ich weiss keine installiert. Zumindest Amarok, Kwrite sind KDE-3.5.9 Anwendungen.

----------

## SvenFischer

```

AMDXP sven # locale -a

C

de_DE

de_DE@euro

de_DE.iso88591

de_DE.iso885915@euro

de_DE.utf8

deutsch

en_US

en_US.iso88591

en_US.utf8

german

POSIX

```

USE Flag "nls" setzen nicht vergessen.

```

AMDXP sven # cat /etc/locale.gen

de_DE.UTF-8 UTF-8

en_US ISO-8859-1

en_US.UTF-8 UTF-8

de_DE ISO-8859-1

de_DE@euro ISO-8859-15

```

```

AMDXP sven # cat /etc/env.d/02locale

# LC_ALL="de_DE.UTF-8"

# LANG="de_DE.UTF-8"

LC_ALL="de_DE.utf8"

LANG="de_DE.utf8"

```

----------

## Yminus

Danke Sven! Ich hab meine Einstellungen jetzt so gesetzt wie Du.

```
# locale -a

C

de_DE

de_DE@euro

de_DE.iso88591

de_DE.iso885915@euro

de_DE.utf8

deutsch

en_US

en_US.iso88591

en_US.utf8

german

POSIX
```

```
# cat /etc/locale.gen 

de_DE.UTF-8 UTF-8

en_US ISO-8859-1

en_US.UTF-8 UTF-8

de_DE ISO-8859-1

de_DE@euro ISO-8859-15
```

```
# cat /etc/env.d/02locale 

LC_ALL="de_DE.utf8"

LANG="de_DE.utf8"
```

USE Flag nls war und ist gesetzt.

```
 # grep nls /etc/make.conf

       netboot network njb nls nntp nsplugin nss nuv nvidia odbc ogg openal
```

Und das Ergebnis macht Hoffnung:

```
# locale

LANG=de_DE.utf8

LC_CTYPE="de_DE.utf8"

LC_NUMERIC="de_DE.utf8"

LC_TIME="de_DE.utf8"

LC_COLLATE="de_DE.utf8"

LC_MONETARY="de_DE.utf8"

LC_MESSAGES="de_DE.utf8"

LC_PAPER="de_DE.utf8"

LC_NAME="de_DE.utf8"

LC_ADDRESS="de_DE.utf8"

LC_TELEPHONE="de_DE.utf8"

LC_MEASUREMENT="de_DE.utf8"

LC_IDENTIFICATION="de_DE.utf8"

LC_ALL=de_DE.utf8
```

Umlaute funktionieren nun in KDE/QT und GTK Anwendungen sowie in der Konsole in XTerm und Eterm. Aber in Tilda (ein X Terminal) bekomme ich nun nur noch "?" für Umlaute, aber ein "ss" für "ß"  und "EUR" für "alt gr + E" (?!? Ich wusste gar nicht, dass es diese Funktionalität gibt!). Ich vermute aber dass das mit der Tilda Konfiguration zusammenhängt. 

Das Problem war vermutlich das "@euro". Scheinbar ist die Anleitung zur deutschen Lokalisierung falsch.

----------

## Yminus

Nach einigem Probieren und Neustarten hab ich nun noch etwas herausgefunden.

Zuerst hatte ich versucht die Datei "/etc/env.d/02locale" wieder so zu editieren, dass LC_ALL nicht gesetzt ist, sondern für alle LC_... ein individueller Wert, da ich für LC_MESSAGES gerne Englisch gesetzt haben möchte. 

```
LC_CTYPE="de_DE.UTF-8"

LC_NUMERIC="de_DE.UTF-8"

LC_TIME="de_DE.UTF-8"

LC_COLLATE="C"

LC_MONETARY="de_DE.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="de_DE.UTF-8"

LC_NAME="de_DE.UTF-8"

LC_ADDRESS="de_DE.UTF-8"

LC_TELEPHONE="de_DE.UTF-8"

LC_MEASUREMENT="de_DE.UTF-8"

LC_IDENTIFICATION="de_DE.UTF-8"

#LC_ALL="de_DE.utf-8"

LANG="de_DE.UTF-8"

LANGUAGE="de_DE:de:en_US:en"
```

```
# env-update && source /etc/profile

>>> Regenerating /etc/ld.so.cache...
```

Das Ergebnis war sehr seltsam, denn auf einmal waren die "@euro" Endungen wieder da. Und da ich keine "utf8@euro" mehr im System habe, gab's auch wieder die entsprechenden Fehlermeldungen:

```
# locale

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

LANG=de_DE.utf8@euro

LC_CTYPE="de_DE.UTF-8@euro"

LC_NUMERIC="de_DE.UTF-8@euro"

LC_TIME="de_DE.UTF-8@euro"

LC_COLLATE="de_DE.UTF-8@euro"

LC_MONETARY="de_DE.UTF-8@euro"

LC_MESSAGES="de_DE.UTF-8@euro"

LC_PAPER="de_DE.UTF-8@euro"

LC_NAME="de_DE.UTF-8@euro"

LC_ADDRESS="de_DE.UTF-8@euro"

LC_TELEPHONE="de_DE.UTF-8@euro"

LC_MEASUREMENT="de_DE.UTF-8@euro"

LC_IDENTIFICATION="de_DE.UTF-8@euro"

LC_ALL=de_DE.UTF-8@euro
```

Ich vermutete, dass es mit dem auskommentierten LC_ALL zusammenhing und habe meine "/etc/env.d/02locale" nun wie folgt editiert:

```
LC_CTYPE="de_DE.UTF-8"

LC_NUMERIC="de_DE.UTF-8"

LC_TIME="de_DE.UTF-8"

LC_COLLATE="C"

LC_MONETARY="de_DE.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="de_DE.UTF-8"

LC_NAME="de_DE.UTF-8"

LC_ADDRESS="de_DE.UTF-8"

LC_TELEPHONE="de_DE.UTF-8"

LC_MEASUREMENT="de_DE.UTF-8"

LC_IDENTIFICATION="de_DE.UTF-8"

LANG="de_DE.UTF-8"

LANGUAGE="de_DE:de:en_US:en"

LC_ALL=""
```

Und tatsächlich habe ich jetzt, auch nach einem Neustart:

```
 # locale

LANG=de_DE.UTF-8

LC_CTYPE=de_DE.UTF-8

LC_NUMERIC=de_DE.UTF-8

LC_TIME=de_DE.UTF-8

LC_COLLATE=C

LC_MONETARY=de_DE.UTF-8

LC_MESSAGES=en_US.UTF-8

LC_PAPER=de_DE.UTF-8

LC_NAME=de_DE.UTF-8

LC_ADDRESS=de_DE.UTF-8

LC_TELEPHONE=de_DE.UTF-8

LC_MEASUREMENT=de_DE.UTF-8

LC_IDENTIFICATION=de_DE.UTF-8

LC_ALL=
```

Sieht so aus, als müsste LC_ALL explizit überschrieben werden, wenn es einmal gesetzt wurde. Das erklärt auch, warum die Einstellungen auf meinem anderen System immer funktioniert haben, dort hatte ich LC_ALL nämlich noch nie gesetzt.

Ein kleines Experiment bestätigt meine Vermutung.

Zunächst irgendeinen Quatsch in LC_ALL schreiben:

```
# nano -w /etc/env.d/02locale 

LC_CTYPE="de_DE.UTF-8"

LC_NUMERIC="de_DE.UTF-8"

LC_TIME="de_DE.UTF-8"

LC_COLLATE="C"

LC_MONETARY="de_DE.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="de_DE.UTF-8"

LC_NAME="de_DE.UTF-8"

LC_ADDRESS="de_DE.UTF-8"

LC_TELEPHONE="de_DE.UTF-8"

LC_MEASUREMENT="de_DE.UTF-8"

LC_IDENTIFICATION="de_DE.UTF-8"

LANG="de_DE.UTF-8"

LANGUAGE="de_DE:de:en_US:en"

LC_ALL="quatsch"
```

Und man hat ein Problem:

```
# env-update

>>> Regenerating /etc/ld.so.cache...

# source /etc/profile

# locale

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

LANG=de_DE.UTF-8

LC_CTYPE="quatsch"

LC_NUMERIC="quatsch"

LC_TIME="quatsch"

LC_COLLATE="quatsch"

LC_MONETARY="quatsch"

LC_MESSAGES="quatsch"

LC_PAPER="quatsch"

LC_NAME="quatsch"

LC_ADDRESS="quatsch"

LC_TELEPHONE="quatsch"

LC_MEASUREMENT="quatsch"

LC_IDENTIFICATION="quatsch"

LC_ALL=quatsch
```

Nun den Quatsch auskommentieren:

```
# nano -w /etc/env.d/02locale 

LC_CTYPE="de_DE.UTF-8"

LC_NUMERIC="de_DE.UTF-8"

LC_TIME="de_DE.UTF-8"

LC_COLLATE="C"

LC_MONETARY="de_DE.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="de_DE.UTF-8"

LC_NAME="de_DE.UTF-8"

LC_ADDRESS="de_DE.UTF-8"

LC_TELEPHONE="de_DE.UTF-8"

LC_MEASUREMENT="de_DE.UTF-8"

LC_IDENTIFICATION="de_DE.UTF-8"

LANG="de_DE.UTF-8"

LANGUAGE="de_DE:de:en_US:en"

#LC_ALL="quatsch"
```

Das Problem bleibt bestehen:

```
# env-update

>>> Regenerating /etc/ld.so.cache...

# source /etc/profile

# locale

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

LANG=de_DE.UTF-8

LC_CTYPE="quatsch"

LC_NUMERIC="quatsch"

LC_TIME="quatsch"

LC_COLLATE="quatsch"

LC_MONETARY="quatsch"

LC_MESSAGES="quatsch"

LC_PAPER="quatsch"

LC_NAME="quatsch"

LC_ADDRESS="quatsch"

LC_TELEPHONE="quatsch"

LC_MEASUREMENT="quatsch"

LC_IDENTIFICATION="quatsch"

LC_ALL=quatsch
```

Wenn für LC_ALL="" explizit der leere String gesetzt wird ist das Problem nach "env-update && source /etc/profile" wieder verschwunden. 

Es ist wirklich schade, dass man auf so etwas nicht bereits in der Anleitung aufmerksam gemacht wird. Überhaupt finde ich dass die Locales unzureichend dokumentiert sind. Es wird zwar erklärt, welche Werte gesetzt werden können, aber was die einzelnen Anwendungen mit diesen Werten machen wird verschwiegen. Ich weiß immer noch nicht, warum das Problem nur unter X auftauchte und nicht in der Konsole.

----------

## AmonAmarth

darum setzt man LANG="de_DE.UTF-8" ja auch in die erste zeile...

----------

## Yminus

 *AmonAmarth wrote:*   

> darum setzt man LANG="de_DE.UTF-8" ja auch in die erste zeile...

 

Das ändert gar nichts am beschriebenen Verhalten. Probier's aus. 

Setze LC_ALL auf irgendeinen ungültigen Wert, mache ein "env-update && source /etc/profile && locale". 

Kommentiere LC_ALL aus und mache wieder ein "env-update && source /etc/profile && locale". 

Der ungültige Wert bleibt, selbst wenn in den anderen LC_... Variablen gültige Werte stehen.

Danach setze LC_ALL wieder auf "" oder einen gültigen Wert (laut Gentoo Anleitung nicht zu empfehlen) und "env-update && source /etc/profile && locale".

So was sollte in der Anleitung stehen. Es hat mich Tage gekostet das herauszufinden und es scheint auch sonst niemand zu wissen, denn auch in den Foren hat mir niemand den Tipp gegeben LC_ALL explizit zu überschreiben.

----------

