]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - check-translations.sh
Fix vortex chargepol
[xonotic/xonotic-data.pk3dir.git] / check-translations.sh
index faee5c4952a3eefa133afb68261371b56479f2d9..5e2ad5a54a1e099e1c33e88261fe1bf45857db8d 100755 (executable)
@@ -5,6 +5,10 @@ case "$1" in
                mode=pot
                mail=false
                ;;
+       txt)
+               mode=txt
+               mail=false
+               ;;
        po)
                mode=po
                mail=true
@@ -25,29 +29,107 @@ case "$1" in
 esac
 
 if [ x"$mode" = x"pot" ]; then
+       make QCC="../../../../gmqcc/gmqcc" clean
+       make QCC="../../../../gmqcc/gmqcc"
        {
-               find qcsrc -type f -name \*.\* -not -name \*.po -not -name \*.txt
-       } | xgettext -LC -k_ -f- --from-code utf-8 -o common.pot >&2
+               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#*.dat.}" != x"$language.po" ]; then
+                       if [ x"${X#common.}" != x"$language.po" ]; then
                                continue
                        fi
                else
-                       if [ x"${X#*.dat.}" = x"en.po" ]; then
+                       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=$(($nu + $nf))
+               n=$(($ne + $nu + $nf))
                changed=false
                for Y in ~/check-translations/"$X".*; do
                        [ -f "$Y" ] || continue
@@ -66,18 +148,22 @@ EOF
                        mv "$X".new "$X"
                        changed=true
                done
+               ne0=$ne
                nu0=$nu
                nf0=$nf
                if $changed; then
-                       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=$(($nu + $nf))
+                       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 '<LL@li.org>|<EMAIL@ADDRESS>'`
@@ -110,6 +196,9 @@ EOF
                                        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
@@ -179,10 +268,11 @@ EOF
        for X in common.*.po.disabled; do
                [ -f "$X" ] || continue
                if [ -n "$language" ]; then
-                       if [ x"${X#*.dat.}" != x"$language.po" ]; then
+                       if [ x"${X#common.}" != x"$language.po" ]; then
                                continue
                        fi
                fi
+               # Note: no -N here, this is the point where we allow fuzzy matching.
                msgmerge -F -U "$X" common.pot >/dev/null 2>&1
        done
 fi