#!/bin/sh
#(c) Copyright 2006 Barry Kauler
#2007 Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html)
#change locale
#locale files are in /usr/lib/locale/ but Puppy won't have all of them.
#they are from glibc package I think. So, will make them into an Unleashed pkg
#and this script can download it, but not install it, just pick out the required
#locale. ...god no, the directory in Vector is 43.8M. So will grab a selection.

#updated for puppy v2.20, aug 2007.
#no longer putting the glibc-locales into zdrv, so ignore all zdrv code below.
#Translated for Russian by Pro.

ZDRV= #PUPSTATE may set this.
. /etc/rc.d/PUPSTATE
[ -z $DISPLAY ] || XSTATUS="yes"

PUPPYVER="`cat /etc/puppyversion`"

if [ -e /zdrv/usr/lib/locale ];then
 MOREMSG="Если хотите, вы можете выбрать другие локали."
 FETCHBTN="Нажмите ЗАГРУЗИТЬ чтобы получить больше локалей..."
else
 MOREMSG="Если хотите, вы можете загрузить другие локали. Для этого должно быть 
установлено соединение с Интернет."
 FETCHBTN="Нажмите ЗАГРУЗИТЬ чтобы загрузить дополнительные локали из Интернет..."
fi

CURRENTLOCALE="`cat /etc/profile | grep "LANG=" | cut -f 2 -d '=' | cut -f 1 -d ' ' | cut -f 1`"

INSTALLEDLOCALES="`ls -1 /usr/lib/locale`"
INSTALLEDLOCSP="`echo -n "$INSTALLEDLOCALES" | tr "\n" " "`"
if [ "$INSTALLEDLOCALES" ];then
 xmessage -bg "#ffc0c0" -center -name "chooselocale" -title "chooselocale: Выбор источника" -buttons "ЛОКАЛЬНО:10,ЗАГРУЗИТЬ:11,ВЫХОД:12" "Добро пожаловать в программу Puppy - выбор локали!
Здесь вы можете установить языковые и национальные настройки для вашего региона. 
Puppy это англоязычный дистрибутив, однако некоторые национальные проекты 
находятся в разработке, и эта маленькая програмка выбора локали, поможет вам.

Для экономии места Puppy имеет следующие установленные локали:
 $INSTALLEDLOCSP
Сейчас Puppy использует следующую локаль:
 $CURRENTLOCALE

$MOREMSG

Нажмите на кнопку ЛОКАЛЬНО если вы хотите сменить текущую локаль...
$FETCHBTN"
 case $? in
  10)
   LOCSRC="local"
   ;;
  11)
   if [ -e /zdrv/usr/lib/locale ];then
    LOCSRC="zdrv"
   else
    LOCSRC="download"
   fi
   ;;
  *)
   exit
   ;;
 esac
fi

if [ "$LOCSRC" = "download" ];then
 while [ 1 ];do
  WWWSITE=""
  #PKGSRC="ftp://ibiblio.org/pub/Linux/distributions/puppylinux/pupget_packages-1"
  #v2.10...
  PKGSRC="http://distro.ibiblio.org/pub/linux/distributions/puppylinux/pet_packages-4"
  ping -c 1 -q ibiblio.org
  if [ ! $? -eq 0 ];then
   ping -c 1 -q ftp.nluug.nl
   if [ $? -eq 0 ];then
    WWWSITE="ftp.nluug.nl"
    PKGSRC="http://ftp.nluug.nl/ftp/pub/os/Linux/distr/puppylinux/pet_packages-4"
   fi
  else
   WWWSITE="ibiblio.org"
  fi
  if [ ! "$WWWSITE" ];then
   xmessage -bg "#ff8080" -center -name "chooselocale" -title "chooselocale: Интернет не подключен" -buttons "OK:10,ВЫХОД:11" "Извините, но Вы, возможно, не подключены к сети Интернет.
Соединение необходимо для загрузки дополнительных локалей.

Установите соединение с Интернет и нажмите кнопку OK..."
   if [ ! $? -eq 10 ];then
    exit
   fi
  else
   break
  fi
 done
fi

if [ "$LOCSRC" = "download" ];then
 #get name of locales pkg...
 #v2.0.0 unleashedpackages.txt no longer used, now use packages.txt here...
 APKGNAME="`cat /root/.packages/packages.txt | grep '"glibc_locales-' | tail -n 1 | cut -f 2 -d '"'`"
 if [ ! "$APKGNAME" ];then
  exit
 fi
 #download locales pkg...
 xmessage -bg "orange" -center -name "chooselocale" -title "chooselocale: загрузка локалей" -buttons "" "Загрузка файлов локалей с сайта $WWWSITE, ожидайте..." &
 mkdir /root/tmp 2> /dev/null
 cd /root/tmp
 while [ 1 ];do
  rxvt -name petget -bg orange -geometry 80x10 -e wget $PKGSRC/${APKGNAME}.pet
  sync
  pet2tgz $APKGNAME.pet
  [ $? -ne 0 ] && break
  tar -zxf $APKGNAME.tar.gz
  [ $? -eq 0 ] && break 
  rm -f $APKGNAME.tar.gz 2> /dev/null
 done
 killall xmessage
 [ -d $APKGNAME ] && ln -s $APKGNAME glibc_locales #v3.01
fi

#get locales out of /zdrv...
if [ "$LOCSRC" = "zdrv" ];then
 APKGNAME="glibc_locales"
 mkdir -p /root/tmp/glibc_locales/usr/lib
 cp -af $PUPZ/usr/lib/locale /root/tmp/glibc_locales/usr/lib/
fi

#create list of locales in format for display in Xdialog radiolist...
if [ "$LOCSRC" = "download" -o "$LOCSRC" = "zdrv" ];then
 if [ ! -d /root/tmp/glibc_locales/usr/lib/locale ];then
  rm -rf /root/tmp 2>/dev/null #v3.01
  xmessage "ОШИБКА"
  exit
 fi
 LOCALENAMES="`ls -1 /root/tmp/$APKGNAME/usr/lib/locale | tr "\n" " "`"
else
 LOCALENAMES="`ls -1 /usr/lib/locale | tr "\n" " "`"
fi
echo -n "" > /tmp/taglocales.txt
for ONELOCALE in $LOCALENAMES
do
 if [ "$ONELOCALE" = "$CURRENTLOCALE" ];then
  FSTATUS="on"
 else
  FSTATUS="off"
 fi
 echo " \"$ONELOCALE\" \"$ONELOCALE\" $FSTATUS \\" >> /tmp/taglocales.txt
done
sync
TAGLOCALES="`cat /tmp/taglocales.txt`"

CURRENTWM="`cat /etc/windowmanager`"

rm -f /tmp/rettag.txt 2> /dev/null
echo '#!/bin/sh' > /tmp/pkgdialog
echo 'RETTAG="`Xdialog --title "chooselocale: Выбор локали" --left --stdout --no-tags --radiolist "Пожалуйста выберите нужную локаль.\nСервер X.org будет перезагружен после нажатия кнопки OK\n\nЗамечание: выбраная локаль будет сохранена в /usr/lib/locale\nи переменная окружения LANG будет записана в /etc/profile" 0 0 10 \' >> /tmp/pkgdialog #'geany
echo "$TAGLOCALES" >> /tmp/pkgdialog
echo ' `"' >> /tmp/pkgdialog
echo 'if [ ! $? -eq 0 ];then' >> /tmp/pkgdialog
echo ' exit'  >> /tmp/pkgdialog
echo 'fi' >> /tmp/pkgdialog
echo 'echo -n "$RETTAG" > /tmp/rettag.txt' >> /tmp/pkgdialog

# ' #dummy tick to fix highlighting
sync
chmod 755 /tmp/pkgdialog
/tmp/pkgdialog

if [ ! -f /tmp/rettag.txt ];then
 exit
fi

#copy chosen locale into Puppy...
NEWLOCALE="`cat /tmp/rettag.txt`"
if [ "$LOCSRC" = "download" -o "$LOCSRC" = "zdrv" ];then
 #rm -rf /usr/lib/locale/$NEWLOCALE 2> /dev/null
 cp -a --remove-destination /root/tmp/$APKGNAME/usr/lib/locale/$NEWLOCALE /usr/lib/locale/
 sync
 rm -rf /root/tmp/$APKGNAME
 rm -f /root/tmp/$APKGNAME.*
fi

if [ ! -d /usr/lib/locale/$NEWLOCALE ];then
 xmessage "Обнаружена ОШИБКА. завершаем работу..."
 exit
fi

#warning before restart X...
xmessage -bg "#c0ffc0" -center -name "chooselocale" -title "chooselocale: Выполнено" -buttons "OK:10,ВЫХОД:11" "Все операции завершены!
Вы выбрали новую локаль $NEWLOCALE.
Файлы новой локали установлены в /usr/lib/locale.

Переменная окружения LANG была записана в /etc/profile
нажмите кнопку OK и сервер X.org быдет перезапущен.

Сервер X.org сейчас будет перезапущен для того, чтобы изменения
вступили в силу. Этот скрипт закроет все запущенные приложения X,
после нажатия кнопки OK.

Если новая локаль работает неправильно, файлы старой локали
($CURRENTLOCALE) находятся в /usr/lib/locale,
и вы можете вручную изменить переменную окружения LANG в файле /etc/profile
для установки предыдущей локали.

Замечание:
Чтобы убедится что ваша новая локаль заработала, после перезапуска
сервера X.org новая переменная LANG будет включена в файл
/usr/X11R7/bin/xwin -- ищите в конце скрипта.

Нажмите кнопку OK для перезапуска сервера X.org...
Нажмите кнопку ВЫХОД для выхода без изменения локали..."

if [ $? -eq 10 ];then
 #Change locale and restart X...
 OLDLANG="LANG=$CURRENTLOCALE"
 NEWLANG="LANG=$NEWLOCALE"
 cat /etc/profile | sed -e "s/${OLDLANG}/${NEWLANG}/" > /tmp/profile
 sync
 cp -f /tmp/profile /etc/profile
 rm -rf /tmp/.X0-lock
 #killall -9 X
 sync
 exec restartwm $CURRENTWM
fi

###END###
