# HG changeset patch # User Sascha Wilde # Date 1405423466 -7200 # Node ID 3a9b0c75f5a6f7583ae693a45532eb1315921b1c # Parent fdc15f0cfdd871d6a4b51dfb189b899cb5a57ce4 Added i18n code and german l10n to linux installer. diff -r fdc15f0cfdd8 -r 3a9b0c75f5a6 CMakeLists.txt --- a/CMakeLists.txt Tue Jul 15 12:03:45 2014 +0200 +++ b/CMakeLists.txt Tue Jul 15 13:24:26 2014 +0200 @@ -121,6 +121,7 @@ configure_file (packaging/create-dist-package.sh.in packaging/create-dist-package.sh @ONLY) configure_file (packaging/linux-createpackage.sh.in packaging/linux-createpackage.sh @ONLY) configure_file (packaging/linux-installer.inc.in packaging/linux-installer.inc @ONLY) +configure_file (packaging/linux-installer.l10n-de packaging/linux-installer.l10n-de COPYONLY) if (ENABLE_PROFILING) configure_file (make-coverage.sh.in make-coverage.sh) diff -r fdc15f0cfdd8 -r 3a9b0c75f5a6 packaging/getxt-gen-l10n-array.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/packaging/getxt-gen-l10n-array.sh Tue Jul 15 13:24:26 2014 +0200 @@ -0,0 +1,57 @@ +# ------------------------------------------------------------------- +# Copyright (C) 2014 by Intevation GmbH +# Author(s): +# Sascha Wilde + +# 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 + MSGIDS+=("$id") + 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" diff -r fdc15f0cfdd8 -r 3a9b0c75f5a6 packaging/linux-createpackage.sh.in --- a/packaging/linux-createpackage.sh.in Tue Jul 15 12:03:45 2014 +0200 +++ b/packaging/linux-createpackage.sh.in Tue Jul 15 13:24:26 2014 +0200 @@ -16,6 +16,8 @@ "@CMAKE_BINARY_DIR@/ui/trustbridge" "@CMAKE_BINARY_DIR@/ui/trustbridge-tray-starter.sh") +L10N_DE_FILE="@CMAKE_BINARY_DIR@/packaging/linux-installer.l10n-de" + # Make installation in TMPDIR, this is what we will put into the # shar-archive. echo "Using $TMPDIR for temporary installation to build installer..." @@ -34,6 +36,7 @@ done sed -i "s/###BINNAMES###/${binnames}/" "$INSTALLER" sed -i "/###SHAR###/r $TMPSHAR" "$INSTALLER" +sed -i "/###L10N_DE###/r $L10N_DE_FILE" "$INSTALLER" chmod +x "$INSTALLER" echo "Cleaning up..." diff -r fdc15f0cfdd8 -r 3a9b0c75f5a6 packaging/linux-installer.inc.in --- a/packaging/linux-installer.inc.in Tue Jul 15 12:03:45 2014 +0200 +++ b/packaging/linux-installer.inc.in Tue Jul 15 13:24:26 2014 +0200 @@ -29,6 +29,31 @@ [PREFIX]='' ) +declare -A L10N_DE +###L10N_DE### + +getxt() +{ + # Poor mans gettext for l10n completely self contained in one shell + # script. + MSGID="$1" + shift + case ${LANGUAGE:-${LC_ALL:-${LC_MESSAGES:-$LANG}}} in + de*) + if [ "${L10N_DE[$MSGID]}" ] ; then + MSG="${L10N_DE[$MSGID]}" + else + MSG="$MSGID" + fi + ;; + *) + MSG="$MSGID" + ;; + esac + + printf "$MSG" "$@" +} + version() { cat <&2 + getxt "$1" >&2 if [ $DEINSTALL -eq 1 ] ; then - echo "Deinstallation failed." >&2 + getxt "Deinstallation failed.\n" >&2 else - echo "Installation failed." >&2 + getxt "Installation failed.\n" >&2 fi exit 1 } @@ -87,7 +112,7 @@ return 1 ;; *) - echo >&2 "Answer [Y]es or [N]o: " + getxt >&2 "Answer [Y]es or [N]o:\n" esac done } @@ -161,7 +186,7 @@ read_oldinstcfg() { if [ -r "$instcfg_file" ] ; then - echo "Reading '$instcfg_file' ..." + getxt "Reading '%s' ...\n" "$instcfg_file" for key in "${!oldinstcfg[@]}" ; do oldinstcfg[$key]=`sed -n "/$key/s/[^=]*=\(.*\)/\1/p" "$instcfg_file"` done @@ -171,7 +196,7 @@ check_priv() { if [ $SYSINST -eq 1 -a "$UID" -ne 0 ] ; then - fatal "System wide installation requires root privileges!" + fatal "System wide installation requires root privileges!\n" fi } @@ -183,7 +208,7 @@ # long as they are empty. local directory="$1" while [ -d "$directory" -a -z "$(ls 2>/dev/null -A "$directory")" ] ; do - echo "Deleting empty directory '$directory' ..." + getxt "Deleting empty directory '%s' ...\n" "$directory" rmdir "$directory" directory=`dirname "$directory"` done @@ -193,7 +218,7 @@ { for file in "$@" ; do if [ -e "$file" ] ; then - echo "Deleting $file ..." + getxt "Deleting '%s' ...\n" "$file" rm "$file" fi done @@ -236,23 +261,23 @@ local cinst="${oldinstcfg[PREFIX]}/bin/cinst" local certlist=`ls 2>/dev/null -1 ${instdata_path}/list-*.txt | sort -nr | head -n 1` - echo "Uninstalling certificates ..." + getxt "Uninstalling certificates ...\n" if [ "$certlist" ] ; then - echo "Using certificate list '$certlist'." + getxt "Using certificate list '%s'.\n" "$certlist" if [ -x "$cinst" ] ; then "$cinst" "list=$certlist" "choices=uninstall" else - echo >&2 "WARNING: can't execute $cinst for certificate deinstallation." + getxt >&2 "WARNING: can't execute %s for certificate deinstallation.\n" "$cinst" fi else - echo "No certificate list found. Nothing to do." + getxt "No certificate list found. Nothing to do.\n" fi } deinstall_etc() { - echo "Removing cron job ..." + getxt "Removing cron job ...\n" remove_cronjob # FIXME: delete all files created by the application. @@ -260,36 +285,39 @@ "${instcfg_path}/trustbridge-tray-starter.cfg" "$instcfg_file" ) - echo "Removing certificate lists from: ${instdata_path}:" + getxt "Removing certificate lists from: %s:\n" "$instdata_path" rm_files "$instdata_path"/list-*.txt + + getxt "Removing PID file from: %s:\n" "$instdata_path" + rm_files "$instdata_path"/*.pid rm_empty_dirs "$instdata_path" - echo "Removing configuration files:" + getxt "Removing configuration files:\n" rm_files "${tbcfg_files[@]}" rm_empty_dirs "$instcfg_path" - echo "Removing TrustBridge from autostart" + getxt "Removing TrustBridge from autostart\n" rm_files "${autostart_path}/tustbridge.desktop" } deinstall() { if [ "${oldinstcfg[PREFIX]}" ] ; then - echo "Really deinstall TrustBridge from '${oldinstcfg[PREFIX]}'? [y/n]" + getxt "Really deinstall TrustBridge from '%s'? [y/n]\n" "${oldinstcfg[PREFIX]}" yorn || exit 0 deinstall_certs local deinstdir="${oldinstcfg[PREFIX]}/bin" - echo "Deinstalling from '${oldinstcfg[PREFIX]}'." + getxt "Deinstalling from '%s'.\n" "${oldinstcfg[PREFIX]}" for file in $BINNAMES ; do local path="${deinstdir}/$file" - echo "Deleting '$path' ..." - rm "$path" || echo >&2 "WARNING: Could not delete: '$path'!" + getxt "Deleting '%s' ...\n" "$path" + rm "$path" || getxt >&2 "WARNING: Could not delete: '%s'!\n" "$path" done rm_empty_dirs "$deinstdir" deinstall_etc - echo "Deinstallation finished." + getxt "Deinstallation finished.\n" else - echo "No current installation found! No harm done." + getxt "No current installation found! No harm done.\n" fi } @@ -312,7 +340,7 @@ # respected with regards to autostart. if [ ! -d "${autostart_path}" ]; then install -d "${autostart_path}" || \ - fatal "Failed to create autostart directory: '${autostart_path}'" + fatal "Failed to create autostart directory: '%s'\n" "$autostart_path" fi write_autostart "${autostart_path}/tustbridge.desktop" @@ -345,12 +373,12 @@ if [ "${oldinstcfg[PREFIX]}" ] ; then inst_default_prefix="${oldinstcfg[PREFIX]}" - echo "An existing installation (v${oldinstcfg[VERSION]}) was detected!" - echo "It is HIGHLY RECOMMENDED to accept the default prefix" - echo "to update the current installation." - echo "For a new prefix you should deinstall first!" + getxt "An existing installation (v%s) was detected!\n" "${oldinstcfg[VERSION]}" + getxt "It is HIGHLY RECOMMENDED to accept the default prefix\n" + getxt "to update the current installation.\n" + getxt "For a new prefix you should deinstall first!\n" fi - echo -n "Select installation prefix for TrustBridge [${inst_default_prefix}]: " + getxt "Select installation prefix for TrustBridge [%s]: " "${inst_default_prefix}" read -e instcfg[PREFIX] [ -z "${instcfg[PREFIX]}" ] && instcfg[PREFIX]="${inst_default_prefix}" @@ -359,18 +387,18 @@ if [ "${oldinstcfg[PREFIX]}" -a \ "${instcfg[PREFIX]}" != "${oldinstcfg[PREFIX]}" -a \ $FORCE -ne 1 ] ; then - fatal "Prefix differs from current installation (${oldinstcfg[PREFIX]}). Aborting!" + fatal "Prefix differs from current installation (%s). Aborting!\n" "${oldinstcfg[PREFIX]}" fi fi -echo "Installing to '${instcfg[PREFIX]}':" +getxt "Installing to '%s':\n" "${instcfg[PREFIX]}" if [ ! -d "${instcfg[PREFIX]}" ] ; then - echo "creating installation directory ..." - install -d "${instcfg[PREFIX]}" || fatal "Could not create '${instcfg[PREFIX]}'!" + getxt "creating installation directory ...\n" + install -d "${instcfg[PREFIX]}" || fatal "Could not create '%s'!\n" "${instcfg[PREFIX]}" fi -echo "unpacking files ..." +getxt "unpacking files ...\n" cd "${instcfg[PREFIX]}" set +u @@ -380,16 +408,16 @@ ###SHAR### # ---------------------------------------------------------------------- -echo "Preparing trustbridge-tray-starter ..." +getxt "Preparing trustbridge-tray-starter ...\n" sed -i "/^PREFIX=/c\PREFIX='${instcfg[PREFIX]}'" \ "${instcfg[PREFIX]}/bin/trustbridge-tray-starter.sh" -echo "Setting up cronjob ..." +getxt "Setting up cronjob ...\n" setup_cronjob -echo "Setting up autostart ..." +getxt "Setting up autostart ...\n" setup_autostart -echo "Writing installation configuration to: $instcfg_file ..." +getxt "Writing installation configuration to: %s ...\n" "$instcfg_file" write_instcfg exit 0 diff -r fdc15f0cfdd8 -r 3a9b0c75f5a6 packaging/linux-installer.l10n-de --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/packaging/linux-installer.l10n-de Tue Jul 15 13:24:26 2014 +0200 @@ -0,0 +1,38 @@ +L10N_DE=( + ["An existing installation (v%s) was detected!\n"]="Es wurde eine vorhandene Installation (v%s) gefunden!\n" + ["Answer [Y]es or [N]o:\n"]="Bitte [J]a oder [N]ein eingeben:\n" + ["Could not create '%s'!\n"]="Konnte '%s' nicht erstellen!\n" + ["Deinstallation failed.\n"]="Deinstallation fehlgeschlagen.\n" + ["Deinstallation finished.\n"]="Deinstallation abgeschlossen.\n" + ["Deinstalling from '%s'.\n"]="Deinstalliere aus '%s'.\n" + ["Deleting '%s' ...\n"]="Lösche '%s' ...\n" + ["Deleting empty directory '%s' ...\n"]="Lösche das leere Verzeichnis '%s' ...\n" + ["Failed to create autostart directory: '%s'\n"]="Konnte das autostart-Verzeichnis '%s' nicht erstellen\n" + ["For a new prefix you should deinstall first!\n"]="Um einen neuen Installations-Pfad zu verwenden bitte erst deinstallieren!\n" + ["Installation failed.\n"]="Installation fehlgeschlagen.\n" + ["Installing to '%s':\n"]="Installiere in '%s':\n" + ["It is HIGHLY RECOMMENDED to accept the default prefix\n"]="Es wird DRINGEND EMPFOHLEN die Vorgabe zu akzeptieren\n" + ["No certificate list found. Nothing to do.\n"]="Keine Zertifikatsliste gefunden. Es muss nichts getan werden.\n" + ["No current installation found! No harm done.\n"]="Keine vorhandene Installation gefunden!\n" + ["Prefix differs from current installation (%s). Aborting!\n"]="Installations-Pfad weicht von vorhandener Installation (%s) ab.\nVorgang abgebrochen!\n" + ["Preparing trustbridge-tray-starter ...\n"]="Bereite trustbridge-tray-starter vor ...\n" + ["Reading '%s' ...\n"]="Lese '%s' ...\n" + ["Really deinstall TrustBridge from '%s'? [y/n]\n"]="Soll TrustBridge wirklich aus '%s' deinstalliert werden? [j/n]\n" + ["Removing PID file from: %s:\n"]="Entferne PID-File aus: %s\n" + ["Removing TrustBridge from autostart\n"]="Entferne TrustBridge aus autostart\n" + ["Removing certificate lists from: %s:\n"]="Entferne Zertifikatsliste aus: %s\n" + ["Removing configuration files:\n"]="Entferne Konfigurationsdateien:\n" + ["Removing cron job ...\n"]="Entferne den Cron-Job ...\n" + ["Select installation prefix for TrustBridge [%s]: "]="Installations-Pfad für TrustBridge [%s]: " + ["Setting up autostart ...\n"]="Konfiguriere autostart ...\n" + ["Setting up cronjob ...\n"]="Konfiguriere den Cron-Job ...\n" + ["System wide installation requires root privileges!\n"]="Für die systemweite Installation werden root-Rechte benötigt!\n" + ["Uninstalling certificates ...\n"]="Deinstalliere Zertifikate ...\n" + ["Using certificate list '%s'.\n"]="Die Zertifikatsliste '%s' wird verwendet.\n" + ["WARNING: Could not delete: '%s'!\n"]="WARNUNG: Konnte '%s' nicht löschen!\n" + ["WARNING: can't execute %s for certificate deinstallation.\n"]="WARNUNG: '%s' kann nicht zum deinstallieren der Zertifikate ausgeführt werden.\n" + ["Writing installation configuration to: %s ...\n"]="Schreibe Installationskonfiguration nach: %s ...\n" + ["creating installation directory ...\n"]="lege das Installations-Verzeichnis an ...\n" + ["to update the current installation.\n"]="um die vorhandene Installation zu aktualisieren.\n" + ["unpacking files ...\n"]="Entpacke Dateien ...\n" +)