#!/bin/bash

get_text () {
[ $(grep "\"$@\"" $textdomaindir/$LANGUAGE/LC_MESSAGES/$textdomain.po 2>/dev/null | wc -l) -eq 1 ] && trans="$(grep -A2 "\"$@\"" $textdomaindir/$LANGUAGE/LC_MESSAGES/$textdomain.po 2>/dev/null | tail -n 2)"
trans="${trans#* }"
trans="${trans//\"/}"
[ -z "$trans" ] && trans="$@"
trans="$(echo "$trans" | sed ':a;N;$!ba;s~\\n\n~\n~g')"
echo "$trans"
}

sprache () {
  k=0
  mark[$k]=$(get_text "Root Directory"); ((k++))
  mark[$k]=$(get_text "Root&#xA0;Directory"); ((k++))
  mark[$k]=$(get_text "External File Systems"); ((k++))
  mark[$k]=$(get_text "External&#xA0;File&#xA0;Systems"); ((k++))
  mark[$k]=$(get_text "(local)"); ((k++))
  mark[$k]=$(get_text "(global)"); ((k++))
  mark[$k]=$(get_text "Applications"); ((k++))
  mark[$k]=$(get_text "Configurations"); ((k++))
  mark[$k]=$(get_text "Icons"); ((k++))
  mark[$k]=$(get_text "Settings"); ((k++))
  mark[$k]=$(get_text "Special Script Archive"); ((k++))
  mark[$k]=$(get_text "Special&#xA0;Script&#xA0;Archive"); ((k++))
  mark[$k]=$(get_text "Script Archive"); ((k++))
  mark[$k]=$(get_text "Script&#xA0;Archive"); ((k++))
  mark[$k]=$(get_text "List Sources"); k=0
  file[$k]="$(get_text "_ To Trash")"; ((k++))
  file[$k]="$(get_text "→ Other User")"; ((k++))
  file[$k]="$sendto/$(get_text "Application")"; ((k++))
  file[$k]="$sendto/$(get_text "Assign Owner")"; ((k++))
  file[$k]="$sendto/$(get_text "Expose File")"; ((k++))
  file[$k]="$sendto/$(get_text "Play File(s) Synchronously")"; ((k++))
  file[$k]="$sendto/$(get_text "Play File(s)")"; ((k++))
  file[$k]="$sendto/.application_x-desktop/$(get_text "Add to system tray")"; ((k++))
  file[$k]="$sendto/.application_x-mswinurl/$(get_text "Expose Url")"; ((k++))
  file[$k]="$sendto/.application_list/$(get_text "Search List Item")"; ((k++))
  file[$k]="$sendto/$(get_text "File Opener")"; ((k++))
  file[$k]="$sendto/$(get_text "Send File(s)")"; ((k++))
  file[$k]="$sendto/.inode_directory/$(get_text "As Wallpapers")"; ((k++))
  file[$k]="$sendto/.inode_directory/$(get_text "Marked Folders")"; ((k++))
  file[$k]="$sendto/.inode_directory/$(get_text "Mark Folder")"; ((k++))
  file[$k]="$sendto/.inode_directory/$(get_text "Play Folder Synchronously")"; ((k++))
  file[$k]="$sendto/.inode_directory/$(get_text "Play Folder")"; ((k++))
  file[$k]="$sendto/.inode_mount-point/$(get_text "Marked Folders")"; ((k++))
  file[$k]="$sendto/.inode_mount-point/$(get_text "Mark Folder")"; ((k++))
  file[$k]="$sendto/.inode_mount-point/$(get_text "Play Folder Synchronously")"; ((k++))
  file[$k]="$sendto/.inode_mount-point/$(get_text "Play Folder")"; ((k++))
  file[$k]="$sendto/.image_jpeg/$(get_text "As Wallpaper")"; ((k++))
  file[$k]="$sendto/.image_png/$(get_text "As Wallpaper")"; ((k++))
  if [ "$user" != "root" ]; then
    file[$k]="$casa/$(get_text "Desktop")"; ((k++))
    $old && doc="$(get_text "Documents")" && cal="$(get_text "Calendar")" # "
    $old && term="$(get_text "Appointment Calendar")" && appcal=($(ls $casa/$doc/$cal/"$term"*)) || appcal=(${appcal[@]/$term/$(get_text "Appointment Calendar")})
    for ((a=0; a<${#appcal[@]}; a++)); do
	file[$k]="${appcal[$a]}"; ((k++))
    done
    file[$k]="$casa/$doc/$cal/$(get_text "Annual Calendar").ods"; ((k++))
    file[$k]="$casa/$doc/$(get_text "Calendar")"; ((k++))
    file[$k]="$casa/$(get_text "Documents")"; ((k++))
    file[$k]="$casa/Multimedia/$(get_text "Music")"; ((k++))
    file[$k]="$casa/$(get_text "Pictures")"; ((k++))
    file[$k]="$casa/Urls/$(get_text "Url Types")"; ((k++))
    file[$k]="$contr_ctr/AppMenu/$(get_text "Create or Delete Category")"; ((k++))
    file[$k]="$contr_ctr/AppMenu/$(get_text "Edit .desktop")"; ((k++))
    file[$k]="$contr_ctr/AppMenu/$(get_text "Expand SysTray")"; ((k++))
    file[$k]="$contr_ctr/AppMenu/$(get_text "Update AppMenu")"; ((k++))
    file[$k]="$contr_ctr/Audio/$(get_text "Sound")"; ((k++))
    file[$k]="$contr_ctr/Audio/$(get_text "Volume")"; ((k++))
    file[$k]="$contr_ctr/Design/$(get_text "Login Screen")"; ((k++))
    file[$k]="$contr_ctr/Design/$(get_text "OpenBox Configuration")"; ((k++))
    $old && desktop="$(get_text "Desktop")"
    file[$k]="$contr_ctr/$desktop/$(get_text "Background")"; ((k++))
    file[$k]="$contr_ctr/$desktop/$(get_text "Edit Tint2 Buttons")"; ((k++))
    file[$k]="$contr_ctr/$desktop/$(get_text "List Structure")"; ((k++))
    file[$k]="$contr_ctr/$desktop/$(get_text "Panel Settings")"; ((k++))
    file[$k]="$contr_ctr/$desktop/$(get_text "Pinboard Options")"; ((k++))
    file[$k]="$contr_ctr/$desktop/$(get_text "Starbuntu Pinboard")"; ((k++))
    file[$k]="$contr_ctr/$desktop/$(get_text "Expand SysTray")"; ((k++))
    file[$k]="$contr_ctr/$desktop/$(get_text "Screenshot")"; ((k++))
    file[$k]="$contr_ctr/$(get_text "Desktop")"; ((k++))
    $old && devices="$(get_text "Devices")" && input="$(get_text "Input Devices")" && screen="$(get_text "Screen")"
    file[$k]="$contr_ctr/$devices/$input/$(get_text "Keyboard Configuration")"; ((k++))
    file[$k]="$contr_ctr/$devices/$input/$(get_text "Keyboard & Mouse")"; ((k++))
    file[$k]="$contr_ctr/$devices/$input/$(get_text "Scanner")"; ((k++))
    file[$k]="$contr_ctr/$devices/$input/$(get_text "Screen Keyboard")"; ((k++))
    file[$k]="$contr_ctr/$devices/$input/$(get_text "Screen Keyboard Settings")"; ((k++))
    file[$k]="$contr_ctr/$devices/$(get_text "Input Devices")"; ((k++))
    file[$k]="$contr_ctr/$devices/$screen/$(get_text "Screen Configuration")"; ((k++))
    file[$k]="$contr_ctr/$devices/$screen/$(get_text "Screenshot")"; ((k++))
    file[$k]="$contr_ctr/$devices/$(get_text "Screen")"; ((k++))
    file[$k]="$contr_ctr/$devices/$(get_text "External Sources")"; ((k++))
    file[$k]="$contr_ctr/$devices/$(get_text "Printer")"; ((k++))
    file[$k]="$contr_ctr/$(get_text "Devices")"; ((k++))
    $old && access="$(get_text "Quick Access")"
    file[$k]="$contr_ctr/$access/$(get_text "Hotkeys")"; ((k++))
    file[$k]="$contr_ctr/$access/$(get_text "Mouse Gestures")"; ((k++))
    file[$k]="$contr_ctr/$(get_text "Quick Access")"; ((k++))
    file[$k]="$contr_ctr/Internet/$(get_text "Network Navigation")"; ((k++))
    file[$k]="$contr_ctr/Internet/$(get_text "Network Settings")"; ((k++))
    $old && session="$(get_text "Session Control")"
    file[$k]="$contr_ctr/$session/$(get_text "Hibernate")"; ((k++))
    file[$k]="$contr_ctr/$session/$(get_text "Lock Screen")"; ((k++))
    file[$k]="$contr_ctr/$session/$(get_text "Logout")"; ((k++))
    file[$k]="$contr_ctr/$session/$(get_text "Pause")"; ((k++))
    file[$k]="$contr_ctr/$session/$(get_text "Reboot")"; ((k++))
    file[$k]="$contr_ctr/$session/$(get_text "Shut Down")"; ((k++))
    file[$k]="$contr_ctr/$(get_text "Session Control")"; ((k++))
    $old && system="$(get_text "System Control")" && boot="$(get_text "Boot Process")" && pkgs="$(get_text "Packages")" && lang="$(get_text "Language")"
    file[$k]="$contr_ctr/$system/$boot/$(get_text "Autologin")"; ((k++))
    file[$k]="$contr_ctr/$system/$boot/$(get_text "Autostart Apps")"; ((k++))
    file[$k]="$contr_ctr/$system/$boot/$(get_text "SDDM Quick Setting")"; ((k++))
    file[$k]="$contr_ctr/$system/$boot/$(get_text "SDDM Settings")"; ((k++))
    file[$k]="$contr_ctr/$system/$boot/$(get_text "Update GRUB")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Boot Process")"; ((k++))
    file[$k]="$contr_ctr/$system/$pkgs/$(get_text "Install Debian Packages")"; ((k++))
    file[$k]="$contr_ctr/$system/$pkgs/$(get_text "Package Manager")"; ((k++))
    file[$k]="$contr_ctr/$system/$pkgs/$(get_text "Package Sources")"; ((k++))
    file[$k]="$contr_ctr/$system/$pkgs/$(get_text "Software Parameters")"; ((k++))
    file[$k]="$contr_ctr/$system/$pkgs/$(get_text "Software Catalog")"; ((k++))
    file[$k]="$contr_ctr/$system/$pkgs/$(get_text "Update System")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Packages")"; ((k++))
    file[$k]="$contr_ctr/$system/$lang/$(get_text "International Keyboards")"; ((k++))
    file[$k]="$contr_ctr/$system/$lang/$(get_text "Keyboard Configuration")"; ((k++))
    file[$k]="$contr_ctr/$system/$lang/$(get_text "Language Changer")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Language")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Date & Time")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Edit Partitions")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Install Starbuntu")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Passwords & Keys")"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "System Information")"; ((k++))
    file[$k]="$contr_ctr/$system/$(echo $(get_text "System Monitor" | sed 's~mü~m-ü~g'))"; ((k++))
    file[$k]="$contr_ctr/$system/$(get_text "Users & Groups")"; ((k++))
    file[$k]="$contr_ctr/$(get_text "System Control")"; ((k++))
    file[$k]="$contr_ctr/$(get_text "Starbuntu Help")"; k=0
    tint2[$k]=$(get_text "Find "); ((k++))
    tint2[$k]=$(get_text "Desktop | Repair | Background"); ((k++))
    tint2[$k]="$(get_text "Calendar 1 | Annual Overview | Calendar 2")"; ((k++))
    tint2[$k]="$(get_text "Trash Bin | Empty Trash Bin")"; ((k++))
    tint2[$k]=$(get_text "Recent"); ((k++))
    tint2[$k]="$(get_text "Without | With Filter")"; ((k++))
    tint2[$k]=$(get_text "Bookmarks Menu"); ((k++))
    tint2[$k]=$(get_text "Marked Folders"); ((k++))
    tint2[$k]=$(get_text "Memo Menu"); ((k++))
    tint2[$k]=$(get_text "Memo"); ((k++))
    tint2[$k]=$(get_text "File Exposition"); ((k++))
    tint2[$k]=$(get_text "File "); ((k++))
    tint2[$k]=$(get_text "Url Exposition"); ((k++))
    tint2[$k]=$(get_text "Help Support"); ((k++))
    tint2[$k]=$(get_text "/C/"); ((k++))
    tint2[$k]=$(get_text "List Structure"); ((k++))
    tint2[$k]=$(get_text "Structure"); ((k++))
    tint2[$k]="$(get_text "External Sources")"; ((k++))
    tint2[$k]=$(get_text "Web Research"); ((k++))
    tint2[$k]=$(get_text "Search"); ((k++))
    tint2[$k]=$(get_text "Edit Panel | Hotkeys | Expand SysTray"); ((k++))
    tint2[$k]=$(get_text "Session Control"); k=0
    pb[$k]="$(get_text "Open Trash Bin&#10;in File Manager")"; ((k++))
    pb[$k]="$(get_text "File Manager")"; ((k++))
    pb[$k]="$(get_text "Execute Command")"; ((k++))
    pb[$k]="$(get_text "E-mails&#10;(+Super: Addresses)")"; ((k++))
    pb[$k]="$(get_text "Super")"; ((k++))
    pb[$k]="$(get_text "Text&#10;Editor")"; ((k++))
    pb[$k]=$(get_text "Repair&#10;Desktop"); ((k++))
    pb[$k]=$(get_text "Rotate&#10;Panel"); ((k++))
    pb[$k]="$(get_text "Starbuntu&#10;Quick Start Guide")"; ((k++))
    pb[$k]="$(get_text "Control Center")"; ((k++))
    pb[$k]="$(get_text "Manual")"; ((k++))
    pb[$k]="$(get_text "External Sources&#10;locally and online")"; ((k++))
    pb[$k]="$(get_text "Starbuntu&#10;Language Changer")"; ((k++))
    pb[$k]="$(get_text "Starbuntu&#10;Installation")"; k=0
    fls[$k]=$(get_text "Annual Calendar"); ((k++))
    fls[$k]="/$(get_text "Calendar")/"; ((k++))
    fls[$k]=$(get_text "Keyboard"); ((k++))
    fls[$k]=$(get_text "Documents"); ((k++))
    fls[$k]=$(get_text "Pictures"); ((k++))
    fls[$k]=$(get_text "Linux Commands"); ((k++))
    fls[$k]=$(get_text "\-en"); ((k++))
    fls[$k]=$(get_text "Manuals"); ((k++))
    fls[$k]=$(get_text "Starbuntu Man Pages"); ((k++))
    fls[$k]="$(get_text "MuseScore Manual")"; k=0
    links[$k]=$(get_text "Television (German)"); ((k++))
    links[$k]="$(get_text "Web Pages")"; ((k++))
    links[$k]="$(get_text "Weather in Munich")"; ((k++))
    links[$k]="$(get_text "en.wikipedia.org/wiki/Main_Page‖Wikipedia Main Page")"; ((k++))
    links[$k]="$(get_text "spiegel.de/international/ nytimes.com/section/world‖Newspapers")"; ((k++))
    links[$k]=$(get_text "Url Types"); ((k++))
    links[$k]="$(get_text "E-mail to")"; ((k++))
    links[$k]="$(get_text "Hi%20Peter,%0D%0A%0D%0Awhat%20a%20wonderful%20distro%20you%20have%20created!%0D%0A%0D%0AThanks%20very%20much!%0D%0A%0D%0ASincerely,%0D%0ABuntu%20Star")"; k=0
    notes[$k]="$(get_text "Web Pages")"; ((k++))
    notes[$k]="$(get_text "What is Starbuntu?")"; ((k++))
    notes[$k]="$(get_text "Starbuntu is a GNU/Linux distribution based on Ubuntu.&#10;It realizes simplicity, clearness, lucidity, suitability for daily use&#10;but also beauty at its best.&#10;OpenBox serves as window manager,&#10;Rox provides the desktop environment and the file manager&#10;and the panel is Tint2.&#10;In the same way the author has taken care&#10;of a well-balanced choice of proper software&#10;and of a maximal modularity of the distribution,&#10;which has been realized through many self-written applications.")"; k=0
    volume[$k]=$(get_text "PulseAudio Control"); ((k++))
    volume[$k]=$(get_text "Volume"); ((k++))
    volume[$k]=$(get_text "on / off")
  fi
}

user="$@"
if [ -z "$user" ] || [ "$user" = '%f' ]; then user=$USER; fi
[ "$user" != "root" ] && casa="/home/$user" || casa="/root"
[ -z "$BOOT" ] && BOOT=false
[ -z "$SET_LANG" ] && . $casa/.config/openbox/environment
if [ -z "$SET_LANG" ]; then
    [ -n "$FIRST_RUN" ] && $FIRST_RUN && SET_LANG=true || SET_LANG=false
    echo "export SET_LANG=$SET_LANG" >> $casa/.config/openbox/environment
fi
! $SET_LANG && exit 0

IFS=$'\n'
old=false
textdomaindir="/usr/local/share/locale"
textdomain="Starbuntu"
list=(\&#9\;Deutsch \&#9\;English \&#9\;Espa\&#241\;ol \&#9\;Fran\&#231\;ais \&#9\;Italiano)
k_list=(de en es fr it)
old_lang="$(cat "$casa/.profile" | grep 'LANGUAGE=')"
old_lang="${old_lang/export LANGUAGE=/}"
LANGUAGE="$old_lang"
if ! $BOOT; then
    k=$(grep -n $LANGUAGE <<< "${k_list[*]}" | cut -d: -f1); ((k--))
    unset list[$k]; unset k_list[$k]
    list=(${list[@]}); k_list=(${k_list[@]})
fi
old_mark=(); new_mark=(); old_file=(); new_file=(); old_tint2=(); new_tint2=()
old_pb=(); new_pb=(); old_fls=(); new_fls=(); old_links=(); new_links=()
old_notes=(); new_notes=(); old_volume=(); new_volume=()
sendto="$casa/.config/rox.sourceforge.net/SendTo"
contr_ctr="$casa/.config/Control_Center"
old=true

sprache
old_mark=(${mark[@]}); old_file=(${file[@]}); old_tint2=(${tint2[@]})
old_pb=(${pb[@]}); old_fls=(${fls[@]}); old_links=(${links[@]}); old_notes=(${notes[@]}); old_volume=(${volume[@]})
devel="$(get_text "Developer of Starbuntu:")"
old=false

h=${#list[@]}; h=$((h*20+100))
language=$(yad --center --title="Language?" --width=200 --height=$h --borders=20 --window-icon="/usr/share/help/C/Starbuntu/figures/flags.png" --list --column="Which Language" --no-headers ${list[@]} --button="OK":0)
err=$?
[ $err -eq 252 ] && exit 252

k=$(grep -n ${language::-1} <<< "${list[*]}" | cut -d: -f1); ((k--))
export LANGUAGE="${k_list[$k]}"
Lang="${LANGUAGE}_$(echo "$LANGUAGE" | tr a-z A-Z)"
[ "$Lang" = "en_EN" ] && Lang="en_GB"
export LANG="$Lang.UTF-8"
$SET_LANG && sed -i "s/SET_LANG=true.*/SET_LANG=false/" "$casa/.config/openbox/environment"
[ "$LANGUAGE" = "$old_lang" ] && exit 0
if ! $BOOT && [ "$user" != "root" ]; then
    title="$(get_text "Language Changer")"
    warning="$(get_text "&#10;    Please wait!&#10;    Language is being changed ...")"$'\n'$'\n'
    yad --center --fixed --title="$title" --borders=20 --window-icon="/usr/share/help/C/Starbuntu/figures/flags.png" --image="dialog-warning" --text="$warning" --no-buttons --close-on-unfocus &
fi

sprache
new_mark=(${mark[@]}); new_file=(${file[@]}); new_tint2=(${tint2[@]})
new_pb=(${pb[@]}); new_fls=(${fls[@]}); new_links=(${links[@]}); new_notes=(${notes[@]}); new_volume=(${volume[@]})

case "$LANGUAGE" in
    de|es|fr|it )  setxkbmap $LANGUAGE ;;
    * )		setxkbmap gb ;;
esac

for ((k=0; k<${#old_mark[@]}; k++)); do
    new_mark[$k]="$(echo "${new_mark[$k]}" | sed 's/&/\\&/g')"
    sed -i "s~${old_mark[$k]}~${new_mark[$k]}~g" $casa/.config/rox.sourceforge.net/ROX-Filer/Bookmarks.xml $casa/.config/gtk-3.0/bookmarks $casa/.config/rox.sourceforge.net/ROX-Filer/marked-directories.lst
done

for ((k=0; k<${#old_file[@]}; k++)); do
    if [ $k -le 1 ]; then
	dir="$sendto"
	find "$dir" -name "${old_file[$k]}" -exec rename "s/${old_file[$k]}/${new_file[$k]}/g" {} +
	find "$dir" -name "*${old_file[$k]}" -exec rename "s/${old_file[$k]}/${new_file[$k]}/g" {} +
    else
	[ "${old_file[$k]}" != "${new_file[$k]}" ] && mv "${old_file[$k]}" "${new_file[$k]}"
    fi
done

if [ "$user" != "root" ]; then
  for ((k=0; k<${#old_tint2[@]}; k++)); do
    sed -i "s~${old_tint2[$k]}~${new_tint2[$k]}~g" $casa/.config/tint2/*
  done

  for ((k=0; k<${#old_pb[@]}; k++)); do
    old_pb[$k]="$(echo "${old_pb[$k]}" | sed 's/&/\\&/g')"
    new_pb[$k]="$(echo "${new_pb[$k]}" | sed 's/&/\\&/g')"
    sed -i "s~${old_pb[$k]}~${new_pb[$k]}~g" $casa/.config/rox.sourceforge.net/ROX-Filer/pb_starbuntu
  done

  for ((k=0; k<${#old_fls[@]}; k++)); do
    old_fls[$k]="$(echo "${old_fls[$k]}" | sed 's/\./\\./g')"
    sed -i "s~${old_fls[$k]}~${new_fls[$k]}~g" $casa/.config/gtk-3.0/files.lst
  done

  for ((k=0; k<${#old_links[@]}; k++)); do
    sed -i "s~${old_links[$k]}~${new_links[$k]}~g" $casa/.config/gtk-3.0/links.lst
  done

  for ((k=0; k<${#old_notes[@]}; k++)); do
    new_notes[$k]="$(echo "${new_notes[$k]}" | sed 's~&~\\&~g')"
    sed -i "s~${old_notes[$k]}~${new_notes[$k]}~g" $casa/.config/gtk-3.0/notes.lst
  done

  for ((k=0; k<${#old_volume[@]}; k++)); do
    sed -i "s~${old_volume[$k]}~${new_volume[$k]}~g" $casa/.config/gtk-3.0/volume.lst
  done
fi

cd $casa/.config/rox.sourceforge.net/ROX-Filer
cp "./menus2-$LANGUAGE" "./menus2"
[ "$user" != "root" ] && cp "./pb_starbuntu" "./pb_starbuntu.bak" && sed -i '/dev_/d' "./pb_starbuntu.bak"
sed -i "s/LANG=.._..\./LANG=$Lang\./" "$casa/.profile"
sed -i "s/LANGUAGE=../LANGUAGE=$LANGUAGE/" "$casa/.profile"
sed -i "s/$devel/$(get_text "Developer of Starbuntu:")/" "$casa/.local/share/clipboard/primary"

if ! $BOOT; then
  if [ "$user" != "root" ]; then
    get-devs
    appmenu-refresh && obamenu-refresh
    [ -n "$(pgrep -f tint2)" ] && del tint2
    pgrep -f systray-item-edit | xargs kill
    $HOME/.config/autostart/Predef Cmds To Systray.desktop
    tint2 &
    ready="$(get_text "Done!&#10;&#10;Attention:   Only after a new login            &#10;&#9;&#9;  the language has changed definitely!&#10;")"
    sleep 12
  else
    ready="&#9;"$"Done!""&#9;&#9;&#9;"
  fi
  yad --center --title="$title" --fixed --window-icon="/usr/share/help/C/Starbuntu/figures/flags.png" --image="info" --borders=20 --text="$ready" --button="OK" &
fi

exit 0
