#!/bin/sh case "$1" in pot) mode=pot mail=false ;; txt) mode=txt mail=false ;; po) mode=po mail=true language=$2 ;; '') echo "Sorry, you are not supposed to use this script." echo "This script is solely for use by the Xonotic Core Team." echo "Unauthorized use of it can cause HIGHLY annoying merge" echo "conflicts." exit 1 ;; *) mode=po mail=false language=$1 ;; esac if [ x"$mode" = x"pot" ]; then make QCC="../../../../gmqcc/gmqcc" clean make QCC="../../../../gmqcc/gmqcc" { grep -h '^\.' .tmp/*_includes.txt | cut -d ' ' -f 2 | sed -e 's,^,qcsrc/,' | while IFS= read -r name; do while :; do case "$name" in */./*) name=${name%%/./*}/${name#*/./} ;; ./*) name=${name#./} ;; */*/../*) before=${name%%/../*} before=${before%/*} name=$before/${name#*/../} ;; */../*) name=${name#*/../} ;; *) break ;; esac done echo "$name" done | sort -u } | xgettext -LC -k_ -f- --from-code utf-8 -F -o common.pot.new >&2 if msgcmp -N --use-untranslated common.pot common.pot.new; then echo "No contentful changes to common.pot - OK." rm -f common.pot.new else echo "Updating common.pot. This probably should be committed." mv -v common.pot.new common.pot fi fi if [ x"$mode" = x"txt" ]; then { item=`grep "^en " languages.txt` echo "$item" for X in common.*.po; do [ -f "$X" ] || continue if [ -n "$language" ]; then if [ x"${X#common.}" != x"$language.po" ]; then continue fi else if [ x"${X#common.}" = x"en.po" ]; then continue fi fi # Note: we're only reporting EXISTING fuzzy matches in the Fuzzy count, thus -N. po=`msgmerge -N "$X" common.pot` ne=`printf "%s\n" "$po" | msgfmt -o /dev/null --check-format --check-header --use-fuzzy - 2>&1 | grep . | wc -l` nu=`printf "%s\n" "$po" | msgattrib --untranslated - | grep -c ^#:` nf=`printf "%s\n" "$po" | msgattrib --fuzzy - | grep -c ^#:` nt=`printf "%s\n" "$po" | grep -c ^#:` n=$(($ne + $nu + $nf)) p=$(( (nt - n) * 100 / nt )) echo >&2 "TODO for translation $X:" echo >&2 "Errors: $ne" echo >&2 "Untranslated: $nu" echo >&2 "Fuzzy: $nf" echo >&2 "Total: $nt" echo >&2 "Percent: $p" l=${X#common.} l=${l%.po} if ! item=`grep "^$l " languages.txt`; then if [ "$p" -lt 50 ]; then continue fi item="$l $l \"$l\" 0%" fi printf "%s\n" "$item" | sed -e "s/[0-9][0-9]*%/$p%/" done } | tr '"' '\t' | sort -k3 | tr '\t' '"' fi if [ x"$mode" = x"po" ]; then for X in common.*.po; do [ -f "$X" ] || continue if [ -n "$language" ]; then if [ x"${X#common.}" != x"$language.po" ]; then continue fi else if [ x"${X#common.}" = x"en.po" ]; then continue fi fi # Note: no -N here, this is the point where we allow fuzzy matching. msgmerge -F -U "$X" common.pot >&2 msgfmt -o /dev/null --check-format --check-header --use-fuzzy "$X" 2>&1 \ | grep . > "$X".errors || rm -f "$X".errors msgattrib --untranslated "$X" | grep . > "$X".untranslated || rm -f "$X".untranslated msgattrib --fuzzy "$X" | grep . > "$X".fuzzy || rm -f "$X".fuzzy ne=$((`wc -l < "$X".errors 2>/dev/null` + 0)) nu=$((`grep -c ^#: "$X".untranslated 2>/dev/null` + 0)) nf=$((`grep -c ^#: "$X".fuzzy 2>/dev/null` + 0)) n=$(($ne + $nu + $nf)) changed=false for Y in ~/check-translations/"$X".*; do [ -f "$Y" ] || continue echo "Merging $Y..." vim -E "$Y" </dev/null; then echo "File $Y has syntax errors. Skipped." continue fi msgcat -F --use-first "$Y" "$X" > "$X".new mv "$X".new "$X" changed=true done ne0=$ne nu0=$nu nf0=$nf if $changed; then msgfmt -o /dev/null --check-format --check-header --use-fuzzy "$X" 2>&1 \ | grep . > "$X".errors || rm -f "$X".errors msgattrib --untranslated "$X" | grep . > "$X".untranslated || rm -f "$X".untranslated msgattrib --fuzzy "$X" | grep . > "$X".fuzzy || rm -f "$X".fuzzy ne=$((`wc -l < "$X".errors 2>/dev/null` + 0)) nu=$((`grep -c ^#: "$X".untranslated 2>/dev/null` + 0)) nf=$((`grep -c ^#: "$X".fuzzy 2>/dev/null` + 0)) n=$(($ne + $nu + $nf)) fi if [ $n -gt 0 ]; then echo "TODO for translation $X:" echo "Errors: $ne (was: $ne0)" echo "Untranslated: $nu (was: $nu0)" echo "Fuzzy: $nf (was: $nf0)" ltr=`grep '^"Last-Translator: ' "$X" | cut -d ' ' -f 2- | cut -d '\\' -f 1 | egrep -v '|'` ltm=`grep '^"Language-Team: ' "$X" | cut -d ' ' -f 2- | cut -d '\\' -f 1 | egrep -v '|'` echo "Translators: $ltr, $ltm" case "$ltr" in '') to=$ltm cc= ;; *) to=$ltr if [ x"$ltr" = x"$ltm" ]; then cc= else cc=$ltm fi ;; esac if [ -n "$to" ]; then echo "To: $to" fi if [ -n "$cc" ]; then echo "Cc: $cc" fi if [ -n "$to" ]; then while $mail; do echo "Send mail? [y/n]" read -r yesno case "$yesno" in y) attach= if [ $ne -gt 0 ]; then attach="$attach $X.errors" fi if [ $nu -gt 0 ]; then attach="$attach $X.untranslated" fi if [ $nf -gt 0 ]; then attach="$attach $X.fuzzy" fi { cat </dev/null 2>&1 done fi