Re: Deutsche locales und thousands_sep bei FreeBSD

From: Oliver Fromme <oliver(at)fromme.com>
Date: Wed, 2 Sep 2015 14:11:04 +0200 (CEST)

Ich nochmal ... :-)

Eine Schritt-für-Schritt-Anleitung, falls es jemand bei sich
ebenfalls ausprobieren möchte ...

In der folgenden Anleitung habe ich ISO8859-15 verwendet,
weil ich das bei mir aus Kompatibilitätsgründen brauche.
Aber man kann natürlich auch UTF-8 verwenden, wenn man
möchte.

Das Locale wird folgendermaßen vorbereitet. Alle Kommandos
werden als normaler Benutzer eingegeben, nicht als root!

$ cd $HOME
$ mkdir -p locale/de_DE.ISO8859-15
$ cd locale/de_DE.ISO8859-15
$ ln -s /usr/share/locale/de_DE.ISO8859-15/* .
$ rm LC_NUMERIC
$ echo "," > LC_NUMERIC
$ echo "·" >> LC_NUMERIC
$ echo "3;3" >> LC_NUMERIC
$ cat LC_NUMERIC
,
·
3;3

Es ist wichtig, dass die Datei LC_NUMERIC genau drei Zeilen
enthält. In der ersten Zeile steht der Dezimaltrenner (im
Deutschen ist ein Komma üblich), in der zweiten steht der
Tausendertrenner, in der dritten stehen zwei Zahlen, durch
Semikolon getrennt. Die erste gibt an, nach wievielen
Ziffern der Tausendertrenner erstmals gesetzt wird, und die
zweite, in welchen weiteren Abständen er gesetzt wird.

Falls man Probleme hat, das Zeichen "·" (Middle Dot) mit der
Tastatur einzugeben, kann man es auch per Copy&Paste aus der
Datei /usr/share/misc/latin1 kopieren; es befindet sich dort
an Position 183 (dezimal) in der rechten Spalte. Oder man
generiert es sich mit einem dieser Shell-Kommandos:

$ printf '\267\n' # ISO8859-15
$ printf '\302\267\n' # UTF-8

Um das Locale zu nutzen, müssen folgende Umgebungsvariablen
gesetzt werden:

PATH_LOCALE=$HOME/locale
LC_NUMERIC=de_DE.ISO8859-15
LC_CTYPE=de_DE.ISO8859-15

Wer will, kann auch LANG setzen; dies dient als Default für
alle LC_* Variablen, die nicht gesetzt sind, außer LC_ALL.
Vorsicht: LC_ALL hat immer Vorrang und überschreibt alles
andere.

Momentan (Stand FreeBSD stable/10) unterstützen die Kommandos
ls(1) und df(1) die Tausendertrenner, wenn man die Option "-,"
(Komma) angibt. Man kann sich dafür Aliase oder Funktionen
schreiben, z.B.:

alias ll='ls -l,'
alias df='df -k,'

Was man NICHT machen sollte, sind Wrapper-Skripte, die "ls"
oder "df" heißen. Das geht in die Hose, wenn andere (fremde)
Skripte sie dann ausführen und vergeblich versuchen, deren
Ausgabe zu parsen. (Wirklich portable Skripte sollten zu
Beginn LC_ALL auf "C" setzen, aber in der Praxis machen das
leider viele nicht.)

Gruß
   Olli

-- 
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 02 Sep 2015 - 14:29:39 CEST

search this site