slitaz-tools annotate tinyutils/tazlocale @ rev 1037

tazbox: lxpolkit support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Oct 23 10:41:01 2021 +0000 (2021-10-23)
parents e26016781ea8
children
rev   line source
pankso@5 1 #!/bin/sh
pankso@5 2 #
pankso@5 3 # Tazlocale: SliTaz GNU/Linux locale setting using dialog boxes.
pankso@752 4 # Configuration file is: /etc/locale.conf
pankso@5 5 #
al@1023 6 # Copyright (C) 2008-2017 SliTaz GNU/Linux - BSD License
pankso@5 7 #
pankso@749 8 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@749 9 #
al@939 10
pankso@749 11 . /lib/libtaz.sh
al@813 12 export TEXTDOMAIN='slitaz-tools' #i18n
pankso@5 13
al@939 14
al@813 15 usage() {
al@813 16 newline
al@813 17 _ 'SliTaz GNU/Linux locale setting using dialog boxes.'
al@1023 18 newline
al@1023 19 boldify "$(_ 'Usage:')"
al@813 20 echo " tazlocale [$(_ 'option')]"
al@1023 21 newline
al@1023 22 boldify "$(_ 'Options:')"
al@813 23 optlist "\
al@813 24 info $(_ 'Show info about config file and current locale.')
al@813 25 list $(_ 'Show list of available locales.')"
al@813 26 newline
al@813 27 _ 'Any other option treated as locale - set locale (root).'
al@813 28 _ 'Display locale selecting dialog if no option given (root).'
al@813 29 newline
al@813 30 }
al@813 31
al@939 32
al@813 33 # Make symlink to file, substitute "%%" to "ll_CC", "ll" or "en" according to
paul@835 34 # current language settings and file existence
al@813 35 # (where "ll_CC" - full locale format (lang and country, and maybe, modifier).
al@939 36
al@813 37 make_i18n_link() {
pascal@1035 38 for i in $LANG $LANGUAGE en; do
pascal@1035 39 [ -e ${1/.%%./.$i.} ] || continue
pascal@1035 40 [ "$(readlink ${1/.%%/})" = "$(basename ${1/.%%./.$i.})" ] ||
pascal@1035 41 ln -fs $(basename ${1/.%%./.$i.}) ${1/.%%/}
pascal@1035 42 break
pascal@1035 43 done
al@813 44 }
pankso@622 45
al@939 46
paul@725 47 # Create symlink to translated files provided by SliTaz language pack,
pankso@338 48 # doc and config files.
al@939 49
al@813 50 link_language_files() {
pankso@338 51 . /etc/locale.conf
pankso@338 52 LANGUAGE=${LANG%_*}
pascal@1029 53 [ "$LANG" = 'POSIX' ] && LANGUAGE='en'
al@939 54
al@813 55 # Openbox menu
al@813 56 make_i18n_link /etc/xdg/openbox/menu.%%.xml
al@939 57
pascal@1034 58 # Documentation & manuals
pascal@1034 59 find /usr/share/doc -name '*.en.html' | \
pascal@1034 60 while read doc; do
pascal@1034 61 make_i18n_link ${doc/.en./.%%.}
pankso@338 62 done
al@939 63
al@716 64 # SliTaz TazWeb "My Web Home"
al@813 65 make_i18n_link /usr/share/tazweb/home.%%.html
al@939 66
al@728 67 # SliTaz WebHome
al@813 68 make_i18n_link /usr/share/webhome/index.%%.html
al@939 69
al@813 70 # TazPanel Doc under www
al@813 71 make_i18n_link /var/www/tazpanel/doc/tazpanel.%%.html
pankso@338 72 }
pankso@338 73
al@939 74
pankso@170 75 # Locale name displayed.
al@939 76
pascal@977 77 locale_names() {
pascal@977 78 [ -d /usr/share/i18n/locales ] &&
pascal@977 79 ls -1 /usr/share/i18n/locales | grep [a-z]_[A-Z]
pascal@977 80 }
pascal@977 81
al@813 82 get_locale_name() {
pascal@977 83 for i in $(locale_names); do
al@961 84 echo -n "$i "
al@961 85 desc=$(grep ^title /usr/share/i18n/locales/$i | cut -d '"' -f 2)
al@961 86 if [ -n "$desc" ]; then
al@961 87 echo "$desc" | tr -c '[A-Za-z0-9\n]' '_'
al@961 88 else
al@961 89 echo "Locale"
al@961 90 fi
pankso@170 91 done
pankso@170 92 }
pankso@170 93
al@939 94
al@813 95 # We have no locale files in /usr/lib/locale by default.
al@813 96 # Run localedef in background to have a faster boot.
al@939 97
al@813 98 gen_utf8_locale() {
al@961 99 if [ ! -d "/usr/lib/locale/$locale.UTF-8" ]; then
al@1023 100 mkdir -p /usr/lib/locale
al@961 101 localedef -i "$locale" -c -f 'UTF-8' "/usr/lib/locale/$locale.UTF-8" &
al@961 102 fi
pankso@426 103 }
pankso@426 104
al@939 105
pankso@749 106 # Config /etc/locale.conf
al@939 107
pankso@749 108 system_config() {
al@961 109 # If locale not defined: show error and exit
al@961 110 ls "/usr/share/i18n/locales/$locale" >/dev/null || return
al@961 111 export LC_ALL="$locale.UTF-8"
al@961 112 action 'Setting system locale to: %s' "$locale.UTF-8"
al@961 113 echo -e "LANG=$locale.UTF-8\nLC_ALL=$locale.UTF-8" > /etc/locale.conf
al@813 114 status
pankso@749 115 gen_utf8_locale
pankso@749 116 link_language_files
al@961 117 # Clean TazPanel cached headers in old language
al@961 118 [ -n "$(which tazpanel)" ] && tazpanel cc
pankso@749 119 }
pankso@749 120
al@939 121
pankso@5 122 # Dialog menu.
al@939 123
al@813 124 dialog_menu() {
pankso@338 125 exec 3>&1
pankso@749 126 locale=$($DIALOG --clear \
pankso@837 127 --title "{ $(_n 'SliTaz language setting') }" \
pankso@837 128 --menu "" 20 72 14 \
pankso@170 129 "en" "English" \
pankso@170 130 $(get_locale_name) \
pankso@749 131 2>&1 1>&3)
pankso@338 132 retval=$?
pankso@338 133 exec 3>&-
pankso@338 134 case $retval in
pankso@622 135 0) continue ;;
pankso@622 136 1|255) exit 0 ;;
pankso@338 137 esac
al@728 138
al@943 139 # Default: POSIX => English
pascal@1029 140 [ "$locale" = 'en' ] && locale='en_US'
al@943 141 [ -s /etc/locale.conf ] && RECONFIG='yes'
al@728 142
pankso@338 143 # If it's a reconfiguration give an info message.
pankso@338 144 if [ -n "$RECONFIG" ]; then
pankso@751 145 export LC_ALL=$locale
al@813 146 msg=$(_n "\
pankso@622 147 Please logout of your current session and login again to use new locale.")
al@813 148 $DIALOG --clear --title " $(_n 'Information') " --msgbox "$msg" 16 70
pankso@338 149 fi
pankso@749 150 system_config
pankso@338 151 }
pankso@5 152
pankso@338 153 case "$1" in
al@813 154 --help|-h)
al@813 155 usage ;;
pankso@753 156 info)
al@961 157 . /etc/locale.conf
al@943 158 _ 'Config file: %s' '/etc/locale.conf'
al@943 159 _ 'Current locale: %s' "$LANG"
al@813 160 ;;
pankso@338 161 list)
al@813 162 list=
pascal@977 163 for i in $(locale_names); do
al@813 164 desc=$(fgrep -m1 title /usr/share/i18n/locales/$i | cut -d'"' -f2)
al@813 165 list="$list
al@813 166 $i $desc"
al@813 167 done
al@813 168 optlist "$list" ;;
pankso@749 169 "")
pankso@749 170 # No args: display Ncurses dialog.
pascal@916 171 : ${DIALOG=dialog --timeout 60}
al@813 172 check_root $@
pankso@749 173 dialog_menu ;;
pankso@749 174 *)
pankso@749 175 # Usage: tazlocale LANG_COUNTRY
pankso@749 176 locale=$1
al@813 177 check_root $@
al@813 178 system_config ;;
pankso@5 179 esac
pankso@5 180
pankso@5 181 exit 0