Fix: Erase all forgotten stuff from grml-config-user [Closes: issue1272]
[grml-scripts.git] / usr_sbin / grml-setlang
index 7079e76..ae6a096 100755 (executable)
@@ -4,7 +4,6 @@
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # 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 <<EOF
 # File generated by $PN on $(date)
-LANGUAGE=$LANGUAGE
 LANG=$LANG
-LC_MESSAGES=$LANG
+# LC_CTYPE=$LC_CTYPE
+# LANGUAGE=$LANGUAGE
 # TZ=$TZ
 # other environment variables you might want to set:
-# LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
-# LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE
-# LC_MEASUREMENT LC_IDENTIFICATION
-# Notice: set LC_ALL to overwrite all LC_* variables
+# LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
+# LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS
+# LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
+#
+# Note: set LC_ALL to overwrite all LC_* variables
+#       LC_ALL > 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."