summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@parabola.nu>2013-05-02 15:12:42 -0400
committerLuke Shumaker <lukeshu@parabola.nu>2018-05-29 15:11:15 -0400
commit9cfe6d64ed9d38c8fb158cd7e792fef7d14d0bea (patch)
tree0e1b4d468e7edc2f5a9e9aae68033525ebd7933b
parent35796c0490efcb7316b96d032e7330598beb9433 (diff)
lib/common.sh: Internationalize
2017-02-15: (070092d) Import from libretools. 2017-02-19: (7c55e79) Tidy formatting (2018-01-02: erroneously removing newlines that had been added to avoid confusing xgettext). 2017-05-05: (c4d5957) Don't say "local var" and "var=$(subshell)" in the same command (shellcheck complains about this). 2017-09-24: Update to work with loading the message functions from /usr/share/makepkg/util.sh 2018-01-02: Avoid confusing xgettext.
-rw-r--r--lib/common.sh53
1 files changed, 45 insertions, 8 deletions
diff --git a/lib/common.sh b/lib/common.sh
index 821f8df..6d6515c 100644
--- a/lib/common.sh
+++ b/lib/common.sh
@@ -11,8 +11,22 @@ set +u +o posix
. /usr/share/makepkg/util.sh
$_INCLUDE_COMMON_SH
-# Avoid any encoding problems
-export LANG=C
+[[ -n ${TEXTDOMAIN:-} ]] || export TEXTDOMAIN='libretools'
+[[ -n ${TEXTDOMAINDIR:-} ]] || export TEXTDOMAINDIR='/usr/share/locale'
+
+if type gettext &>/dev/null; then
+ _() { gettext "$@"; }
+else
+ _() { echo "$@"; }
+fi
+
+_l() {
+ TEXTDOMAIN='librelib' TEXTDOMAINDIR='/usr/share/locale' "$@"
+}
+
+_p() {
+ TEXTDOMAIN='pacman-scripts' TEXTDOMAINDIR='/usr/share/locale' "$@"
+}
shopt -s extglob
@@ -24,15 +38,36 @@ else
declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''
fi
+# makepkg message functions expect gettext to already be called; like
+# `msg "$(gettext 'Hello World')"`. Where libretools expects the
+# message functions to call gettext. So, we'll do some magic to wrap
+# the makepkg versions.
+eval "$(
+ fns=(
+ plain
+ msg
+ msg2
+ warning
+ error
+ )
+
+ # declare _makepkg_${fn} as a copy of ${fn}
+ declare -f "${fns[@]}" | sed 's/^[a-z]/_makepkg_&/'
+
+ # re-declare ${fn} as a wrapper around _makepkg_${fn}
+ printf '%s() { local mesg; mesg="$(_ "$1")"; _p _makepkg_"${FUNCNAME[0]}" "$mesg" "${@:2}"; }\n' \
+ "${fns[@]}"
+)"
+
stat_busy() {
- local mesg=$1; shift
+ local mesg; mesg="$(_ "$1")"; shift
# shellcheck disable=2059
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}...${ALL_OFF}" "$@" >&2
}
stat_done() {
# shellcheck disable=2059
- printf "${BOLD}done${ALL_OFF}\n" >&2
+ printf "${BOLD}$(_l _ "done")${ALL_OFF}\n" >&2
}
_setup_workdir=false
@@ -51,7 +86,7 @@ cleanup() {
}
abort() {
- error 'Aborting...'
+ _l error 'Aborting...'
cleanup 255
}
@@ -74,7 +109,8 @@ die() {
##
# usage : lock( $fd, $file, $message, [ $message_arguments... ] )
##
-lock() {
+lock() # newline here to avoid confusing xgettext
+{
# Only reopen the FD if it wasn't handed to us
if ! [[ "/dev/fd/$1" -ef "$2" ]]; then
mkdir -p -- "$(dirname -- "$2")"
@@ -91,7 +127,8 @@ lock() {
##
# usage : slock( $fd, $file, $message, [ $message_arguments... ] )
##
-slock() {
+slock() # newline here to avoid confusing xgettext
+{
# Only reopen the FD if it wasn't handed to us
if ! [[ "/dev/fd/$1" -ef "$2" ]]; then
mkdir -p -- "$(dirname -- "$2")"
@@ -179,7 +216,7 @@ find_cached_package() {
return 0
;;
*)
- error 'Multiple packages found:'
+ _l error 'Multiple packages found:'
printf '\t%s\n' "${results[@]}" >&2
return 1
esac