#!/bin/bash

# This script configures the system locale.

# Translations only work with utf8 locales
if [ ! `echo $LANG | grep -i utf` ]; then
	LANG=C
fi

# Gettext internationalization
export TEXTDOMAIN="localesetup"
export TEXTDOMAINDIR="/usr/share/locale"
. gettext.sh

dialog="dialog"

# Just to be sure
unset locale newlocale

# usage screen
usage(){
	echo "`eval_gettext 'USAGE: localesetup [locale]'`"
	echo "`eval_gettext 'EXAMPLE: localesetup en_US'`"
	exit 1
}

if [ $# -gt 1 ]; then
	echo "`eval_gettext 'ERROR: Too many arguments'`"
	usage
fi

# check for root privileges
if [ "$UID" != "0" ]; then
	echo "`eval_gettext 'You need root privileges to run this'`"
	exit 1
fi

if [ ! -z $1 ]; then
	newlocale="`echo $1 | sed 's/UTF-8/utf8/'`"
	if [[ `locale -cva |grep locale | grep utf8 | sed "s/locale: \(.*\) *directory.*/\1/"| grep "^$newlocale\|$newlocale.utf8"` ]]; then
		locale="`echo $newlocale | sed "s/.utf8//"`.utf8"
		echo "`eval_gettext 'Setting locale to $locale'`"
	else
		echo "`eval_gettext 'ERROR: $newlocale is not a valid locale'`"
		usage
	fi
else

# start of interactive section

# find current locale
currentlocale="$(cat /etc/profile.d/lang.sh \
  | grep -E "^[[:space:]]*export LANG=" \
  | sed -e "s/^[ ]*export LANG=\(.*\)$/\1/")"

# default to en_US.utf8 if what is set in lang.sh is only just en_US 
if [ "$currentlocale" = "en_US" ]; then
	defaultlocale="en_US.utf8"
else
	defaultlocale="$currentlocale"
fi

# probe for available locales
list="$(locale -cva \
| grep -A 2 utf8 | sed '/^-/d' \
| sed '
/^locale:.*directory.*/{
s/^locale: \([^ ]*\) *directory.*$/\1/
N
s/^\(.*\) *\n *title . \(.*\)$/"\1" "\2 " \\/'}
)"

# generate a menu
locale="$(eval $dialog \
--stdout \
--title \"`eval_gettext 'System language configuration'`\" \
--default-item \"${defaultlocale}\" \
--ok-label "`eval_gettext 'OK'`" \
--cancel-label "`eval_gettext 'Exit'`" \
--menu \
\"\\n`eval_gettext 'The current locale is $currentlocale.'` \\n\\n\
`eval_gettext 'Please select your preferred system language:'`\" 0 0 11 \
"${list}"
)"

fi

# end of interactive section

# set locale
if [ "$locale" ]; then
	sed -i "s/^ *\(export LANG=\).*$/\1$locale/" /etc/profile.d/lang.sh
	/bin/bash /etc/profile.d/lang.sh
	locale_noutf8=`echo $locale | sed "s/.utf8//"`
	if [ -f /etc/kde/kdm/kdmrc ]; then
		sed -i "s/\(^\|^#\)Language=.*/Language=$locale_noutf8/" /etc/kde/kdm/kdmrc
	fi
fi

# end

