#!/bin/sh # Filename: grml-setlang # Purpose: set language system-wide on grml system # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. ################################################################################ PN="$(basename "$0")" DIALOG=dialog LANGFUNC=/etc/grml/language-functions # notice: Debian's locales.postinst has been modified to write # locale variables into /etc/default/locale instead of # /etc/environment; the latter file is a PAM configuration file, # so modifying it was a policy violation. CONFFILE=/etc/default/locale # shellcheck disable=SC1091 { . /etc/grml/script-functions . /etc/grml/lsb-functions } check4root || exit 100 eindent # as we are running inside grml boot sequence as well make sure we integrate fine # allow writing $CONFFILE non-interactive via "grml-setlang $LANGUAGE" if [ -n "$1" ] ; then NONINTERACTIVE=1 else NONINTERACTIVE='' fi if ! [ -r "$LANGFUNC" ] ; then echo "$LANGFUNC could not be read. Make sure you have package grml-autoconfig installed." >&2 exit 1 fi setvalue(){ [ -n "$2" ] || return 1 # already present in conffile? if grep -q "^${1}" "$CONFFILE" ; then sed -i "s#^${1}.*#${1}${2}#" $CONFFILE # is the new Debian style /etc/default/locale present? elif grep -q "^# ${1}$" "$CONFFILE" ; then # shellcheck disable=SC1117 sed -i "s#^\# ${1}#${1}${2}#" $CONFFILE else echo "$1${2}" >> $CONFFILE fi } # grml-small does not provide any further locales if grep -q small /etc/grml_version 2>/dev/null ; then if [ -z "$NONINTERACTIVE" ] ; then LANG=C $DIALOG --stdout --msgbox "Notice: grml-small does not provide a full language setup. You have to make sure the appropriate packages are installed." 0 0 exit 1 else esyslog user.notice "$PN" 'grml-small does not provide a full language setup.' fi fi # shellcheck disable=SC1091 { [ -r /etc/environment ] && . /etc/environment [ -r /etc/default/locale ] && . /etc/default/locale } [ -n "$LANGUAGE" ] && DEFAULT_LANGUAGE="$LANGUAGE" if [ -z "$DEFAULT_LANGUAGE" ] ; then DEFAULT_LANGUAGE=en fi if [ -z "$NONINTERACTIVE" ] ; then # shellcheck disable=SC1010 { LANGUAGE=$(LANG=C $DIALOG --stdout --title "$PN" --default-item $DEFAULT_LANGUAGE --radiolist \ "Which language do you want to use? This will affect \$LANG, \$LANGUAGE and \$LC_MESSAGES. Notice: if you want to adjust /etc/locale.gen (defines which locales should be generated by locale-gen) please run 'dpkg-reconfigure locales' manually. Configuration will be written to $CONFFILE" 0 0 0 \ at 'austria (unicode version)' off \ at-iso 'austrian (iso version)' off \ au 'austrial (unicode version)' off \ au-iso 'australian (iso version)' off \ be 'belgian (unicode version)' off \ be-iso 'belgian (iso version)' off \ bg 'bulgarian (unicode version)' off \ bg-iso 'bulgarian (iso version)' off \ br 'brazilian (unicode version)' off \ br-iso 'brazilian (iso version)' off \ ch 'swiss (unicode version)' off \ ch-iso 'swiss (iso version)' off \ cf 'french canadian' off \ cn 'chinese (unicode version)' off \ cn-iso 'chinese (iso version)' off \ cs 'czech (unicode version)' off \ cs-iso 'czech (iso version)' off \ cz 'czech (unicode version)' off \ cz-iso 'czech (iso version)' off \ de 'german (unicode version)' off \ de-iso 'german (iso version)' off \ dk 'dansk (unicode version)' off \ dk-iso 'dansk (iso version)' off \ da 'dansk (unicode version)' off \ da-iso 'dansk (iso version)' off \ el 'greek (unicode version)' off \ el-iso 'greek (iso version)' off \ en 'english [us] (unicode version, grml default)' on \ en-iso 'english [us] (iso version)' off \ es 'spanish (unicode version)' off \ es-iso 'spanish (iso version)' off \ fi 'finnish (unicode version)' off \ fi-iso 'finnish (iso version)' off \ fr 'frensh (unicode version)' off \ fr-iso 'frensh (iso version)' off \ ga 'irish gaeilge (unicode version)' off \ ga-iso 'irish gaeilge (iso version)' off \ he 'hebrew (unicode version)' off \ he-iso 'hebrew (iso version)' off \ il 'hebrew (unicode version)' off \ il-iso 'hebrew (iso version)' off \ ie 'irish (unicode version)' off \ ie-iso 'irish (iso version)' off \ it 'italian (unicode version)' off \ it-iso 'italian (iso version)' off \ ja 'japanese (unicode version)' off \ ja-iso 'japanese (iso version)' off \ nl 'dutch (unicode version)' off \ nl-iso 'dutch (iso version)' off \ pl 'polish (unicode version)' off \ pl-iso 'polisch (iso version)' off \ pt 'portuguese (unicode version)' off \ pt-iso 'portuguese (iso version)' off \ ru 'russian (unicode version)' off \ ru-iso 'russian (iso version)' off \ sk 'slovak (unicode version)' off \ sk-iso 'slovak (iso version)' off \ sl 'slovenian (unicode version)' off \ sl-iso 'slovenian (iso version)' off \ tr 'turkish (unicode version)' off \ tr-iso 'turkish (iso version)' off \ tw 'chinese (traditional) (unicode version)' off \ tw-iso 'chinese (traditional) (iso version)' off \ uk 'british (unicode version)' off \ uk-iso 'british (iso version)' off \ us 'american (unicode version)' off \ us-iso 'american (iso version)' off \ ) } retval=$? case $retval in (0) # everything ok ;; (1) echo "Cancel pressed." ; exit 1 ;; (255) echo "ESC pressed." ; exit 1 ;; esac else # non-interactive LANGUAGE="$1" fi if ! grep -qe "${LANGUAGE})" -qe "${LANGUAGE}|" $LANGFUNC ; then ewarn "Language ${LANGUAGE} not supported, using default." ; eend 0 fi # fallback to C if using an ISO system (which is latin1 for LC_CTYPE); # this should prevent users from broken ctype settings if the set # locale isn't available on a remote system if echo "$LANGUAGE" | grep -q -- '-iso' ; then LC_CTYPE=C fi # read in the file where all the $LANGUAGE stuff is defined # shellcheck disable=SC1090 . $LANGFUNC # make sure the file exists if ! [ -r $CONFFILE ] ; then cat > $CONFFILE < LC_* > LANG # LANGUAGE is glibc only and binds stronger than LC_ALL EOF fi setvalue 'LANG=' "$LANG" retval=$? case $retval in (0) if [ -z "$NONINTERACTIVE" ] ; then LANG=C $DIALOG --stdout --msgbox "Writing language settings ($LANGUAGE) to $CONFFILE was successful." 0 0 else einfo "Writing language settings ($LANGUAGE) to $CONFFILE was successful." esyslog user.notice "$PN" "Writing language settings ($LANGUAGE) to $CONFFILE was successful." ; eend 0 fi ;; *) if [ -z "$NONINTERACTIVE" ] ; then LANG=C $DIALOG --stdout --msgbox "Error writing settings for $LANGUAGE to $CONFFILE." 0 0 else eerror "Error writing settings for $LANGUAGE to $CONFFILE." ; eend 1 esyslog user.notice "$PN" "Error writing settings for $LANGUAGE to $CONFFILE." fi ;; esac eoutdent ## END OF FILE #################################################################