slitaz-tools view tinyutils/tazlocale @ rev 930

Finish previous tiny edit
author Aleksej Bobylev <al.bobylev@gmail.com>
date Tue Nov 25 00:41:01 2014 +0200 (2014-11-25)
parents 720dfc98b497
children 5d80f6fdbdb7
line source
1 #!/bin/sh
2 #
3 # Tazlocale: SliTaz GNU/Linux locale setting using dialog boxes.
4 # Configuration file is: /etc/locale.conf
5 #
6 # Copyright (C) 2008-2014 SliTaz GNU/Linux - BSD License
7 #
8 # Author: Christophe Lincoln <pankso@slitaz.org>
9 #
10 . /lib/libtaz.sh
11 export TEXTDOMAIN='slitaz-tools' #i18n
13 usage() {
14 newline
15 _ 'SliTaz GNU/Linux locale setting using dialog boxes.'
17 newline; boldify "$(_ 'Usage:')"
18 echo " tazlocale [$(_ 'option')]"
20 newline; boldify "$(_ 'Options:')"
21 optlist "\
22 info $(_ 'Show info about config file and current locale.')
23 list $(_ 'Show list of available locales.')"
25 newline
26 _ 'Any other option treated as locale - set locale (root).'
27 _ 'Display locale selecting dialog if no option given (root).'
28 newline
29 }
31 # Make symlink to file, substitute "%%" to "ll_CC", "ll" or "en" according to
32 # current language settings and file existence
33 # (where "ll_CC" - full locale format (lang and country, and maybe, modifier).
34 make_i18n_link() {
35 if [ -d $(dirname ${1/.%%/}) ]; then
36 cd $(dirname ${1/.%%/})
38 if [ -e ${1/%%/$LANG} ]; then
39 ln -fs $(basename ${1/%%/$LANG}) ${1/.%%/}
40 else
41 if [ -e ${1/%%/$LANGUAGE} ]; then
42 ln -fs $(basename ${1/%%/$LANGUAGE}) ${1/.%%/}
43 else
44 ln -fs $(basename ${1/%%/en}) ${1/.%%/}
45 fi
46 fi
47 fi
48 }
50 # Create symlink to translated files provided by SliTaz language pack,
51 # doc and config files.
52 link_language_files() {
53 . /etc/locale.conf
54 LANGUAGE=${LANG%_*}
55 [ "$LANG" == "POSIX" ] && LANGUAGE="en"
56 # Openbox menu
57 make_i18n_link /etc/xdg/openbox/menu.%%.xml
58 # Documentation
59 make_i18n_link /usr/share/doc/slitaz/index.%%.html
60 # SliTaz Software Manuals
61 for soft in tazpkg tazlito tazusb tazwok tazweb cookutils; do
62 make_i18n_link /usr/share/doc/$soft/$soft.%%.html
63 done
64 # SliTaz TazWeb "My Web Home"
65 make_i18n_link /usr/share/tazweb/home.%%.html
66 # SliTaz WebHome
67 make_i18n_link /usr/share/webhome/index.%%.html
68 # TazPanel Doc under www
69 make_i18n_link /var/www/tazpanel/doc/tazpanel.%%.html
70 # SliTaz Tools Manuals
71 for soft in burnbox tazinst; do
72 make_i18n_link /usr/share/doc/slitaz-tools/$soft.%%.html
73 done
74 }
76 # Locale name displayed.
77 get_locale_name() {
78 for i in $(ls -1 /usr/share/i18n/locales | grep [a-z]_[A-Z]); do
79 #desc=$(grep ^title /usr/share/i18n/locales/$i | cut -d '"' -f 2)
80 echo "$i Locale"
81 done
82 }
84 # We have no locale files in /usr/lib/locale by default.
85 # Run localedef in background to have a faster boot.
86 gen_utf8_locale() {
87 [ -e /usr/lib/locale/$locale ] || \
88 localedef -i $locale -c -f UTF-8 /usr/lib/locale/$locale &
89 }
91 # Config /etc/locale.conf
92 system_config() {
93 export LC_ALL=$locale
94 _n "Setting system locale to: $locale"
95 echo -e "LANG=$locale\nLC_ALL=$locale" > /etc/locale.conf
96 status
97 gen_utf8_locale
98 link_language_files
99 }
101 # Dialog menu.
102 dialog_menu() {
103 exec 3>&1
104 locale=$($DIALOG --clear \
105 --title "{ $(_n 'SliTaz language setting') }" \
106 --menu "" 20 72 14 \
107 "en" "English" \
108 $(get_locale_name) \
109 2>&1 1>&3)
110 retval=$?
111 exec 3>&-
112 case $retval in
113 0) continue ;;
114 1|255) exit 0 ;;
115 esac
117 # Default: POSIX = English
118 [ "$locale" = "en" ] && locale="en_US"
119 [ -s /etc/locale.conf ] && RECONFIG="yes"
121 # If it's a reconfiguration give an info message.
122 if [ -n "$RECONFIG" ]; then
123 export LC_ALL=$locale
124 msg=$(_n "\
125 Please logout of your current session and login again to use new locale.")
126 $DIALOG --clear --title " $(_n 'Information') " --msgbox "$msg" 16 70
127 fi
128 system_config
129 }
131 case "$1" in
132 --help|-h)
133 usage ;;
134 info)
135 optlist "\
136 $(_ 'Config file:') /etc/locale.conf
137 $(_ 'Current locale:') $LANG"
138 ;;
139 list)
140 list=
141 for i in $(ls -1 /usr/share/i18n/locales | grep '[a-z]_[A-Z]'); do
142 desc=$(fgrep -m1 title /usr/share/i18n/locales/$i | cut -d'"' -f2)
143 list="$list
144 $i $desc"
145 done
146 optlist "$list" ;;
147 "")
148 # No args: display Ncurses dialog.
149 : ${DIALOG=dialog --timeout 60}
150 check_root $@
151 dialog_menu ;;
152 *)
153 # Usage: tazlocale LANG_COUNTRY
154 locale=$1
155 check_root $@
156 system_config ;;
157 esac
159 exit 0