Ich hatte mir das etwas anders vorgestellt aber...
Klasse, super was du da entworfen hast.
Hatte anfangs Schwierigkeiten damit was du mit genlocal meintest.
Irgendwie hat mich das irritiert. (liegt wohl daran dass es eine local.gen gibt)
Ich hab das dann "verbessert" in test.sh und erst später kappiert, dass du mit genlocal skript damit benannt hast.
Jedenfalls test.sh läuft einwandfrei.
./test.sh -l de_DE
Habe einiges editiert. Stielfragen hauptsächlich und das Skript etwas weiterentwickelt.
Kommentare in Deutsch sind für dich, und können auch gelöscht werden wenn damit alles o.K. ist.
Die englischen sollten stehen bleiben wenn sie sprachlich passabel sind.
Habe alles einfach frech so gemacht wie ich es dachte.
Denke es ist gut wenn jeder von uns das tut was er am besten findet, der code spricht ja von allein und so kommen wir am besten in die Arbeit.
Wenn was nicht passend ist, muss man sich halt beschweren.
Habe ein 'sudo pacman -S shellcheck' getätigt und damit das skript auf mögliche Fehler getestet. 'shellcheck test.sh'.
Den "Fehler" in Zeile 59 bekomme ich nicht weg. Vielleicht spinnt hier aber auch nur das Programm shellcheck.
Hier gibt es einen Artikel über das Prog:
linuxundich.de
Macht jetzt richtig Spaß auf der Konsole zuzusehen wie die locales sich von allein konfigurieren.
Also, du hast sehr gut gebastel, hoffe dass ich auch ein wenig hinbekommen habe:
#!/bin/bash
# start as root?
if [ $UID -ne 0 ]; then
sudo bash -c "$0 $*"; exit $?
fi
# stop in a clean way
trap cleanupandexit 0 1 2 3 15
# print help message
usage()
{
cat << EOF
test.sh configures locale files for arch linux
usage: $0 <option> <value>
-l <la_CO> set language_COUNTRY code. Example: 'fr_CA' for French in Canada
-r <DIR> Root file system
-x With XOrg
-h shows this help
Examples:
./test.sh -l en_GB
#Tip: To search for language_COUNTRY codes do 'cat /etc/locale.gen' on terminal.
./test.sh -l de_DE -r /mnt -x
EOF
}
cleanupandexit()
{
echo "$message"
exit 0
}
# optargs
while getopts "l:r:x:h" OPTION
do
case $OPTION in
l) LANG=$OPTARG ;;
r) rootfs=$OPTARG ;;
x) xorg=1 ;;
h) usage; exit 1 ;;
*) echo "usage: $0 [-v] [-r]" >&2; exit 1 ;; #ergänzt. Shellcheck sagt ansonsten: SC2181
esac
done
# check $rootfs
if [ ! -e "$rootfs/etc/locale.gen" ]; then
rc=1; message="Rootfs $rootfs isn't a install directory!" ; cleanupandexit
fi
# reconfigure /etc/locale.gen. # Ist nötig sonst läuft das Skript nicht wenn locale.gen schon einmal zuvor konfiguriert wurde.
sed -ie "/#/!s/^/#/" "$rootfs/etc/locale.gen" # Fügt # am Anfang jeder Zeile ein, außer es gibt schon eines.
# check $LANG
grep "#$LANG" "$rootfs/etc/locale.gen" 1> /dev/null
if [ $? != "0" ]; then #shellcheck hat hier Probleme und zeigt mehere Fehlercodes.SC1009 SC1073 SC1072
rc=1; message="Language $lang doesn't exist!"; cleanupandexit
fi
#set lang
lang="${LANG%_*}"
# edit /etc/locale.conf
echo ""
echo "Edit $rootfs/etc/locale.conf..." # Mit dem $rootsfs hab ich mich mal angepasst. Schauen wir später mal ob wir es überhaubt brauchen werden.
echo "LANG=$LANG.UTF-8" > "$rootfs/etc/locale.conf"
echo "LANGUAGE="$lang":en" >> "$rootfs/etc/locale.conf" # Def. best and second best language. #siehe: https://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/The-LANGUAGE-variable.html
#echo "LC_COLLATE=C" >> "$rootfs/etc/locale.conf" # optional: Sorts first little than big letters.
echo "LC_TIME=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_PAPER=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_MEASUREMENT=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_MONETARY=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_NUMERIC=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_CTYPE=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_MESSAGES=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_NAME=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_ADDRESS=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_TELEPHONE=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_IDENTIFICATION=$LANG.UTF-8" >> "$rootfs/etc/locale.conf"
echo "LC_ALL=" >> "$rootfs/etc/locale.conf"
cat "$rootfs/etc/locale.conf"
echo ""
# edit /etc/locale.gen
sed -ie "s/#$LANG/$LANG/" "$rootfs/etc/locale.gen" # ohne g ersetzt nur das 1. Vorkommen von # pro Zeile
sed -ie "s/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" "$rootfs/etc/locale.gen" #Empfohlen siehe AfE (Anleitung für Einsteiger)
locale-gen
echo ""
# #### test ####
echo "$LANG" "$rootfs" "$xorg"
rc=0; message=OK; cleanupandexit
Wenn du magst schau bitte mal auf die Seite
The-LANGUAGE-variable
Wenn ich das richtig verstanden habe, dann muss es z.B.: LANGUAGE=de:en dort heißen und definiert eine Haupt und eine Ersatzsprache falls eine Übersetzung nicht vorhanden ist.
Wenn das stimmt müsste man die Anleitung für Einsteiger in der Arch-Wiki entsprchend anpassen. Dort steht das ein wenig missverständlich.
Update: Kleine Skriptänderung um 16:25