#!/bin/bash

# system-locales-mx
#
# Configure system locales

# check root
#
if test "$(id -u)" != 0; then
  printf "$(gettext su-to-root 'This command needs %s privileges to be executed.\n')" root
  exit 1
fi

case $XDG_CURRENT_DESKTOP in
  KDE)  FRONTEND=kde;;
  *)    FRONTEND=gnome;;
esac

# window defaults
#
 TITLE="Configure system locales"
  ICON=preferences-desktop-locale
 WIDTH=900
HEIGHT=500

# current screen height
#
H=$(xrandr | sed -n -E '/^Screen.*current/{ s/.*current\s[0-9]+\sx\s([0-9]+).*/\1/p;}')
if [ -n $H ]  && [ $H -ge 700 ]; then
   # set to 70% of screen hight
   HEIGHT=$(( $H * 7 / 10 ))
fi

# locale info's
#
lang_title () {
   local LANG=$1
   local title
   LANG=${LANG%.UTF-8}
   LANG=${LANG%.ISO-8859-1}
   title=$( grep -A2 ^LC_IDENTIFICATION /usr/share/i18n/locales/${LANG} 2>/dev/null | \
            sed -n -E '/^title/{s/^title\s+\"([^"]*)\"/\1/p;q}' 2>/dev/null )
   echo "$title"
}
sys_lang() {
   local sys_lang
   sys_lang="$(grep -o -E '^LANG=[^#[:space:]]+'  /etc/default/locale 2>/dev/null |  tail -1 2>/dev/null)"
   sys_lang="${sys_lang#LANG=}"
   echo "$sys_lang"
}
      
# locale sanity checks
#
PROC_LANG="C"
USER_LANG="$LANG"
SYS_LANG="$(sys_lang)"

if [ x"$USER_LANG" != "x" ] && \
   LANG=C locale -a | sed s/utf8/UTF-8/ | grep -q "${USER_LANG/utf8/UTF-8}"; then 
   PROC_LANG="$USER_LANG"
elif [ x"$SYS_LANG" != "x" ] && \
   LANG=C locale -a | sed s/utf8/UTF-8/ | grep -q "${SYS_LANG/utf8/UTF-8}"; then 
   PROC_LANG="$SYS_LANG"
elif LANG=C locale -a | sed s/utf8/UTF-8/ | grep -q "C.UTF-8"; then 
   PROC_LANG="C.UTF-8"
fi

# configure system locales
#
( env LANG="$PROC_LANG" dpkg-reconfigure -f$FRONTEND locales 2>&1 
   RET=$?
   if [ $RET != 0 ]; then
       echo " "
       echo '"'"$TITLE"'"'" canceled: exit [$RET]"
       echo " "
       exit $RET
   else  
       echo "System locale:"
       SYS_LANG="$(sys_lang)"
       LANG_TITLE="$(lang_title $SYS_LANG)"
       echo "$SYS_LANG - $LANG_TITLE"
   fi
   ) | ( \
   
   read LINE
   # capture debconf "sh: printf: I/O error" after cancel
   [  "${LINE% }" = "sh: printf: I/O error" ] && LINE=""  
   echo "$LINE" ; echo "$LINE" ; 

   while read LINE; do 
	   if [ -n "$LINE" ] && [ -z "${LINE##*... done}" ]; then
         GEN_LANG="${LINE%... done}"
         LANG_TITLE="$(lang_title $GEN_LANG)"
         echo "$LINE - $LANG_TITLE"
	   else
		   echo "$LINE"
	   fi 
   done 
   ) | ( read; \
   yad \
      --text-info \
      --title="$TITLE" \
      --window-icon=$ICON \
      --width=$WIDTH \
      --height=$HEIGHT \
      --margins=9 \
      --borders=7 \
      --center \
      --on-top \
      --tail \
      --button="gtk-close:1"
   )

exit
