X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=bin%2Frun_xgettext.sh;h=0768ed4f143047d2628f879609c9817bee811560;hb=299c4df8f433019b486bd2e379a1d8a51f11d3a7;hp=818aabe2ffc45ee2c8077ed60b5167ed4a5bc2bb;hpb=f7190ce9714be3e2edbc0915c854fc707cfbbcc6;p=friendica.git diff --git a/bin/run_xgettext.sh b/bin/run_xgettext.sh index 818aabe2ff..0768ed4f14 100755 --- a/bin/run_xgettext.sh +++ b/bin/run_xgettext.sh @@ -1,9 +1,20 @@ #!/bin/bash -FULLPATH=$(dirname $(readlink -f "$0")) +set -eo pipefail -if [ "$1" == "--help" -o "$1" == "-h" ] +function resolve { + if [ "$(uname)" == "Darwin" ] + then + realpath "$1" + else + readlink -f "$1" + fi +} + +FULLPATH=$(dirname "$(resolve "$0")") + +if [ "$1" == "--help" ] || [ "$1" == "-h" ] then - echo "$(basename $(readlink -f "$0")) [options]" + echo "$(basename "$(resolve "$0")") [options]" echo echo "-a | --addon extract strings from addon 'name'" echo "-s | --single single addon mode: extract string from current folder" @@ -12,45 +23,44 @@ fi MODE='default' ADDONNAME= -if [ "$1" == "--addon" -o "$1" == "-a" ] +if [ "$1" == "--addon" ] || [ "$1" == "-a" ] then MODE='addon' - if [ -z $2 ]; then echo -e "ERROR: missing addon name\n\nrun_xgettext.sh -a "; exit 1; fi + if [ -z "$2" ]; then echo -e "ERROR: missing addon name\n\nrun_xgettext.sh -a "; exit 1; fi ADDONNAME=$2 if [ ! -d "$FULLPATH/../addon/$ADDONNAME" ]; then echo "ERROR: addon '$ADDONNAME' not found"; exit 2; fi fi -if [ "$1" == "--single" -o "$1" == "-s" ] +if [ "$1" == "--single" ] || [ "$1" == "-s" ] then MODE='single' fi - case "$MODE" in 'addon') cd "$FULLPATH/../addon/$ADDONNAME" mkdir -p "$FULLPATH/../addon/$ADDONNAME/lang/C" OUTFILE="$FULLPATH/../addon/$ADDONNAME/lang/C/messages.po" FINDSTARTDIR="." - FINDOPTS= + FINDOPTS="-path ./vendor -prune -or" ;; 'single') FULLPATH=$PWD - ADDONNAME=$(basename $FULLPATH) + ADDONNAME=$(basename "$FULLPATH") mkdir -p "$FULLPATH/lang/C" OUTFILE="$FULLPATH/lang/C/messages.po" FINDSTARTDIR="." - FINDOPTS= + FINDOPTS="-path ./vendor -prune -or" echo "Extract strings for single addon '$ADDONNAME'" ;; 'default') cd "$FULLPATH/.." - OUTFILE="$FULLPATH/../util/messages.po" + OUTFILE="$FULLPATH/../view/lang/C/messages.po" FINDSTARTDIR="." # skip addon folder - FINDOPTS="( -wholename */addon -or -wholename */addons-extra -or -wholename */smarty3 ) -prune -o" + FINDOPTS="( -path ./addon -or -path ./addons -or -path ./addons-extra -or -path ./tests -or -path ./view/lang -or -path ./view/smarty3 -or -path ./vendor -or -path ./local -or -path ./avatar -or -path ./proxy ) -prune -or" - F9KVERSION=$(sed -n "s/.*'FRIENDICA_VERSION'.*'\([0-9.]*\)'.*/\1/p" ./boot.php); + F9KVERSION=$(cat ./VERSION); echo "Friendica version $F9KVERSION" ;; esac @@ -58,44 +68,59 @@ esac KEYWORDS="-k -kt -ktt:1,2" -echo "extract strings to $OUTFILE.." -rm "$OUTFILE"; touch "$OUTFILE" -for f in $(find "$FINDSTARTDIR" $FINDOPTS -name "*.php" -type f) +echo "Extract strings to $OUTFILE.." +[ -f "$OUTFILE" ] && rm "$OUTFILE"; touch "$OUTFILE" + +# shellcheck disable=SC2086 # $FINDOPTS is meant to be split +find_result=$(find "$FINDSTARTDIR" $FINDOPTS -name "*.php" -type f | LC_ALL=C sort --stable) + +total_files=$(wc -l <<< "${find_result}") + +count=1 +for file in $find_result do - if [ ! -d "$f" ] + echo -ne " \r" + echo -ne "Reading file $count/$total_files..." + + # On Windows, find still outputs the name of pruned folders + if [ ! -d "$file" ] then - xgettext $KEYWORDS -j -o "$OUTFILE" --from-code=UTF-8 "$f" - sed -i "s/CHARSET/UTF-8/g" "$OUTFILE" + # shellcheck disable=SC2086 # $KEYWORDS is meant to be split + xgettext $KEYWORDS -j -o "$OUTFILE" --from-code=UTF-8 "$file" || exit 1 + sed -i.bkp "s/CHARSET/UTF-8/g" "$OUTFILE" fi + (( count++ )) done +echo -ne "\n" + +echo "Interpolate metadata.." -echo "setup base info.." -case "$MODE" in +sed -i.bkp "s/^\"Plural-Forms.*$//g" "$OUTFILE" + +case "$MODE" in 'addon'|'single') - sed -i "s/SOME DESCRIPTIVE TITLE./ADDON $ADDONNAME/g" "$OUTFILE" - sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER//g" "$OUTFILE" - sed -i "s/FIRST AUTHOR , YEAR.//g" "$OUTFILE" - sed -i "s/PACKAGE VERSION//g" "$OUTFILE" - sed -i "s/PACKAGE/Friendica $ADDONNAME addon/g" "$OUTFILE" - sed -i "s/CHARSET/UTF-8/g" "$OUTFILE" - sed -i "s/^\"Plural-Forms.*$//g" "$OUTFILE" + sed -i.bkp "s/SOME DESCRIPTIVE TITLE./ADDON $ADDONNAME/g" "$OUTFILE" + sed -i.bkp "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER//g" "$OUTFILE" + sed -i.bkp "s/FIRST AUTHOR , YEAR.//g" "$OUTFILE" + sed -i.bkp "s/PACKAGE VERSION//g" "$OUTFILE" + sed -i.bkp "s/PACKAGE/Friendica $ADDONNAME addon/g" "$OUTFILE" ;; 'default') - sed -i "s/SOME DESCRIPTIVE TITLE./FRIENDICA Distributed Social Network/g" "$OUTFILE" - sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010, 2011, 2012, 2013 the Friendica Project/g" "$OUTFILE" - sed -i "s/FIRST AUTHOR , YEAR./Mike Macgirvin, 2010/g" "$OUTFILE" - sed -i "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE" - sed -i "s/PACKAGE/Friendica/g" "$OUTFILE" - sed -i "s/CHARSET/UTF-8/g" "$OUTFILE" - sed -i "s/^\"Plural-Forms.*$//g" "$OUTFILE" + sed -i.bkp "s/SOME DESCRIPTIVE TITLE./FRIENDICA Distributed Social Network/g" "$OUTFILE" + sed -i.bkp "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010-$(date +%Y), the Friendica project/g" "$OUTFILE" + sed -i.bkp "s/FIRST AUTHOR , YEAR./Mike Macgirvin, 2010/g" "$OUTFILE" + sed -i.bkp "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE" + sed -i.bkp "s/PACKAGE/Friendica/g" "$OUTFILE" ;; esac -if [ "" != "$1" -a "$MODE" == "default" ] +if [ "" != "$1" ] && [ "$MODE" == "default" ] then - UPDATEFILE="$(readlink -f ${FULLPATH}/$1)" - echo "merging new strings to $UPDATEFILE.." - msgmerge -U $OUTFILE $UPDATEFILE + UPDATEFILE="$(resolve "${FULLPATH}/$1")" + echo "Merging new strings to $UPDATEFILE.." + msgmerge -U "$OUTFILE" "$UPDATEFILE" fi -echo "done." +[ -f "$OUTFILE.bkp" ] && rm "$OUTFILE.bkp" + +echo "Done."