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 |