#!/bin/bash

# system-locales-mx
#
# Configure system locales
# some msg-strings to be translated
#
export TEXTDOMAINDIR=/usr/share/locale/
export TEXTDOMAIN="mx-goodies"
#
# some msg-strings to be translated
#
    CLOSE="$(gettext -d gtk30 'Close')"
 CANCELED="$(gettext 'canceled')"
    TITLE="$(gettext 'Configure System Locales')"
SYSLOCALE="$(gettext 'System locale')"

# some msg-strings we have translations already
#
CHKROOT="gettext su-to-root 'This command needs %s privileges to be executed.\n'"
CHKROOT="$(eval $CHKROOT)"

# check root
#
if test "$(id -u)" != 0; then
  printf "$CHKROOT" root
  exit 1
fi

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

# window defaults
#
  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 "--"
       echo "${SYSLOCALE}:"
       SYS_LANG="$(sys_lang)"
       LANG_TITLE="$(lang_title $SYS_LANG)"
       echo "$SYS_LANG - $LANG_TITLE"
   fi
   ) | ( \

   i=0
   while read LINE; do
       [[ -z "$LINE" ]] && continue
       [[ "$LINE" =~ 'dbind-WARNING' ]] && continue
       [[ "$LINE" =~ 'I/O error'     ]] && continue
       [[ "$LINE" =~ 'Gtk-WARNING'   ]] && continue
       ((i++))
       if [ -n "$LINE" ] && [ -z "${LINE##*... done}" ]; then
         GEN_LANG="${LINE%... done}"
         LANG_TITLE="$(lang_title $GEN_LANG | sed -r 's/(<U)([[:xdigit:]]{4})>/\\u\2/g')"
         printf "$LINE - $LANG_TITLE\n"
       else
           [ $i = 1 ] && echo "$LINE"
           echo "$LINE"
       fi
   done
   ) | ( read; \
   LC_ALL= LANG=C.UTF-8 yad \
      --text-info \
      --title="$TITLE" \
      --class="System Locales" \
      --window-icon=$ICON \
      --width=$WIDTH \
      --height=$HEIGHT \
      --margins=9 \
      --borders=7 \
      --center \
      --on-top \
      --tail \
      --button="$CLOSE"'!gtk-close:1' 2>/dev/null
   )

exit
