X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=usr_sbin%2Fgrml-setlang;h=ae6a096703298087f9fe75b1cdf6563ca8c1a687;hb=b0c3e5ff760f99d6ff7721852bc1a0d73c5ea201;hp=7079e76445cf1c7a5ed86d230db3e70bb665a82d;hpb=d6b26ce3b8ffa721052bfb0eebc546ac9a63e5f9;p=grml-scripts.git diff --git a/usr_sbin/grml-setlang b/usr_sbin/grml-setlang index 7079e76..ae6a096 100755 --- a/usr_sbin/grml-setlang +++ b/usr_sbin/grml-setlang @@ -4,7 +4,6 @@ # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Fre Mär 16 22:49:29 CET 2007 [mika] ################################################################################ PN="$(basename $0)" @@ -40,8 +39,11 @@ fi setvalue(){ [ -n "$2" ] || return 1 # already present in conffile? - if grep -q ${1} $CONFFILE ; then - sed -i "s#^${1}.*#${1}${2}#" $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 + sed -i "s#^\# ${1}#${1}${2}#" $CONFFILE else echo "$1${2}" >> $CONFFILE fi @@ -50,7 +52,7 @@ setvalue(){ # grml-small does not provide any further locales if grep -q small /etc/grml_version 2>/dev/null ; then if [ -z "$NONINTERACTIVE" ] ; then - $DIALOG --stdout --msgbox "Notice: grml-small does not provide a full language setup. + 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 @@ -68,14 +70,14 @@ if [ -z "$DEFAULT_LANGUAGE" ] ; then fi if [ -z "$NONINTERACTIVE" ] ; then - LANGUAGE=$($DIALOG --stdout --title "$PN" --default-item $DEFAULT_LANGUAGE --radiolist \ + 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 locale' manually. +please run 'dpkg-reconfigure locales' manually. Configuration will be written to $CONFFILE" 0 0 0 \ at 'austria (unicode version)' off \ @@ -159,39 +161,46 @@ else # non-interactive LANGUAGE="$1" fi -if ! grep -q "${LANGUAGE})" $LANGFUNC ; then +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 - source $LANGFUNC + . $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 'LANGUAGE=' $LANGUAGE -setvalue 'LANG=' $LANG -setvalue 'LC_MESSAGES=' $LANG -# setvalue 'TZ=' $TZ +setvalue 'LANG=' $LANG retval=$? case $retval in (0) if [ -z "$NONINTERACTIVE" ] ; then - $DIALOG --stdout --msgbox "Writing language settings ($LANGUAGE) to $CONFFILE was successful." 0 0 + 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 @@ -199,7 +208,7 @@ case $retval in ;; *) if [ -z "$NONINTERACTIVE" ] ; then - $DIALOG --stdout --msgbox "Error writing settings for $LANGUAGE to $CONFFILE." 0 0 + 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."