slitaz-base-files annotate rootfs/lib/libtaz.sh @ rev 177

libtaz.sh, Makefile: fix design of i18n
author Aleksej Bobylev <al.bobylev@gmail.com>
date Mon May 21 10:06:27 2012 +0300 (2012-05-21)
parents c09b461ada93
children d8adb319ac56
rev   line source
pankso@125 1 #!/bin/sh
pankso@125 2 #
pankso@125 3 # SliTaz Base functions used from boot scripts to end user tools. Use
pankso@125 4 # gettext and not echo for messages. Keep output suitable for GTK boxes
pankso@125 5 # and Ncurses dialog. LibTaz should not depend on any configuration file.
paul@166 6 # No bloated code here, functions must be used by at least 3-4 tools.
pankso@139 7 #
pankso@139 8 # Documentation: man libtaz or /usr/share/doc/slitaz/libtaz.txt
pankso@125 9 #
pankso@125 10 # Copyright (C) 2012 SliTaz GNU/Linux - BSD License
pankso@125 11 #
pankso@125 12
pankso@125 13 # Internationalization.
pankso@125 14 . /usr/bin/gettext.sh
al@177 15 # We can't export TEXTDOMAIN because this script includes to other scripts
al@177 16 # with other TEXTDOMAIN exported
al@177 17 ## TEXTDOMAIN='slitaz-base'
al@177 18 ## export TEXTDOMAIN
al@177 19
al@177 20 # xgettext (from Makefile) can't extract strings from above example:
al@177 21 # gettext -d 'slitaz-base' 'Done'
al@177 22 # so, I define own function (and add it as option to xgettext to Makefile)
al@177 23 lgettext() {
al@177 24 gettext -d 'slitaz-base' $1
al@177 25 }
pankso@125 26
pankso@125 27 # Internal variables.
al@177 28 okmsg="$(lgettext 'Done')"
al@177 29 ermsg="$(lgettext 'Failed')"
pankso@174 30 : ${okcolor=32}
pankso@174 31 : ${ercolor=31}
pankso@174 32 : ${decolor=36}
pankso@125 33
pankso@137 34 # Parse cmdline options and store values in a variable.
pankso@125 35 for opt in "$@"
pankso@125 36 do
pankso@125 37 case "$opt" in
pankso@137 38 --*=*) export ${opt#--} ;;
pankso@137 39 --*) export ${opt#--}="yes" ;;
pankso@125 40 esac
pankso@125 41 done
pankso@131 42 [ "$HTTP_REFERER" ] && output="html"
pankso@125 43
pankso@125 44 # Return command status. Default to colored console output.
pankso@125 45 status() {
pankso@125 46 local check=$?
pankso@131 47 case $output in
pankso@161 48 raw|gtk)
pankso@161 49 done=" $okmsg"
pankso@131 50 error=" $ermsg" ;;
pankso@131 51 html)
pankso@167 52 done=" <span style='color: $okcolor;'>$okmsg</span>"
pankso@167 53 error=" <span style='color: $ercolor;'>$ermsg</span>" ;;
pankso@136 54 *)
pankso@141 55 cols=$(stty -a -F /dev/tty | head -n 1 | cut -d ";" -f 3 | awk '{print $2}')
pankso@131 56 local scol=$(($cols - 10))
pankso@131 57 done="\\033[${scol}G[ \\033[1;${okcolor}m${okmsg}\\033[0;39m ]"
pankso@131 58 error="\\033[${scol}G[ \\033[1;${ercolor}m${ermsg}\\033[0;39m ]" ;;
pankso@131 59 esac
pankso@125 60 if [ $check = 0 ]; then
pankso@125 61 echo -e "$done"
pankso@125 62 else
pankso@125 63 echo -e "$error"
pankso@125 64 fi
pankso@125 65 }
pankso@125 66
pankso@125 67 # Line separator.
pankso@125 68 separator() {
pankso@132 69 local sepchar="="
pankso@132 70 [ "$HTTP_REFERER" ] && local sepchar="<hr />"
pankso@132 71 case $output in
pankso@132 72 raw|gtk) local sepchar="-" && local cols="8" ;;
pankso@132 73 html) local sepchar="<hr />" ;;
pankso@141 74 *) local cols=$(stty -a -F /dev/tty | head -n 1 | cut -d ";" -f 3 | awk '{print $2}') ;;
pankso@132 75 esac
pankso@125 76 for c in $(seq 1 $cols); do
pankso@131 77 echo -n "$sepchar"
pankso@125 78 done && echo ""
pankso@125 79 }
pankso@125 80
pankso@164 81 # New line for echo -n or gettext.
pankso@164 82 newline() {
pankso@164 83 echo ""
pankso@164 84 }
pankso@164 85
pankso@125 86 # Display a bold message. GTK Yad: Works only in --text=""
pankso@125 87 boldify() {
pankso@125 88 case $output in
meshca@149 89 raw) echo "$@" ;;
meshca@149 90 gtk) echo "<b>$@</b>" ;;
meshca@149 91 html) echo "<strong>$@</strong>" ;;
meshca@149 92 *) echo -e "\\033[1m$@\\033[0m" ;;
pankso@125 93 esac
pankso@125 94 }
pankso@125 95
pankso@167 96 # Usage: colorize "Message" colorNB or use --color=NB option
pankso@167 97 # when running a tool. Default to white/38 and no html or gtk.
pankso@167 98 colorize() {
meshca@175 99 : ${color=$1}
meshca@175 100 shift
meshca@175 101 local content="$@"
pankso@167 102 case $output in
meshca@175 103 raw|gtk|html) echo "$content" ;;
pankso@167 104 *)
pankso@168 105 [ "$color" ] || color=38
meshca@175 106 echo -e "\\033[1;${color}m${content}\\033[0;39m" ;;
pankso@167 107 esac
pankso@167 108 unset color
pankso@167 109 }
pankso@167 110
pankso@174 111 # Indent text $1 spaces.
pankso@161 112 indent() {
meshca@158 113 local in="$1"
meshca@158 114 shift
pankso@161 115 echo -e "\033["$in"G $@";
meshca@158 116 }
meshca@158 117
pankso@125 118 # Check if user is logged as root.
pankso@125 119 check_root() {
pankso@125 120 if [ $(id -u) != 0 ]; then
al@177 121 lgettext "You must be root to execute:" && echo " $(basename $0) $@"
pankso@125 122 exit 1
pankso@125 123 fi
pankso@125 124 }
meshca@158 125
pankso@174 126 # Display debug info when --debug is used.
meshca@169 127 debug() {
meshca@176 128 [ "$debug" ] && echo "$(colorize $decolor "DEBUG:") $1"
meshca@169 129 }
meshca@169 130
pankso@161 131 # Gettextize yes/no.
meshca@158 132 translate_query() {
meshca@158 133 case $1 in
al@177 134 y) lgettext "y" ;;
al@177 135 Y) lgettext "Y" ;;
al@177 136 n) lgettext "n" ;;
al@177 137 N) lgettext "N" ;;
meshca@158 138 # Support other cases but keep them untranslated.
meshca@158 139 *) echo "$1" ;;
meshca@158 140 esac
meshca@158 141 }
meshca@160 142
pankso@161 143 # Usage: echo -n "The question" && confirm
pankso@161 144 confirm() {
pankso@161 145 [ "$yes" ] && true
pankso@161 146 echo -n " ($(translate_query y)/$(translate_query N)) ? "
pankso@161 147 read answer
pankso@161 148 [ "$answer" == "$(translate_query y)" ]
meshca@160 149 }
pankso@161 150
pankso@164 151 # Log activities. $activity should be set by the script. The log format
pankso@164 152 # is suitable for web interfaces like cook. Usage: log "String"
pankso@162 153 log() {
pankso@163 154 [ "$activity" ] || activity=/var/log/slitaz/libtaz.log
pankso@164 155 echo "$(date '+%Y-%m-%d %H:%M') : $@" >> $activity
pankso@162 156 }