view packaging/getxt-gen-l10n-array.sh @ 831:747a48996c1f

(Issue13) Precompile uninstaller Create-dist-packge now creates a temporary installer that only writes the uninstaller. Then it excutes this installer (using wine) to create the uninstaller. That uninstaller is then packaged normaly and packaged instead of the written uninstaller.
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 24 Jul 2014 15:59:00 +0200
parents 6e300f749a6d
children 069f5e5344f6
line wrap: on
line source
# -------------------------------------------------------------------
# Copyright (C) 2014 by Intevation GmbH
# Author(s):
# Sascha Wilde <wilde@intevation.de>

# This program is free software under the GNU GPL (>=v2)
# Read the file COPYING coming with the software for details.
# -------------------------------------------------------------------

# Extract getxt strings from source and generate an array for usage in
# the script using our getxt function.

# USAGE: getxt-gen-l10n-array.sh SRC ARRAYNAME ARRAYFILE
#
#        Where SRC is the shell script using getxt and ARRAYFILE is
#        the file to which the generated array is to be saved.
#
#        ARRAYNAME is the name of the associative bash array to generate.
#
#        If ARRAYFILE exists, values already defined will be preserved,
#        if the MSGID still exists.

# FIXME: we can't handle quoted quotes: "\"" -- don't use them for
#        now...

declare -a MSGIDS
declare -A L10N

get_msgids()
{
  while read -r id ; do
    if [ "$id" != '"$1"' ] ; then
        MSGIDS+=("$id")
    fi
  done < <( sed -n 's/.*\(getxt\|fatal\) [^"]*\("[^"]*"\).*/\2/p' "$1" | sort | uniq )
}

merge_l10n()
{
  for msgid in "${MSGIDS[@]}" ; do
    msg=`grep -F "[${msgid}]" "$1" | sed -n 's/.*="\(.*\)"/\1/p'`
    if [ "$msg" ] ; then
        L10N["$msgid"]="$msg"
    fi
  done
}

write_l10n_array()
{
  echo "$1=("
  for msgid in "${MSGIDS[@]}" ; do
    echo "  [${msgid}]=\"${L10N[$msgid]}\""
  done
  echo ")"
}

get_msgids "$1"
merge_l10n "$3"
write_l10n_array "$2" >"$3"

http://wald.intevation.org/projects/trustbridge/