]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - check-translations.sh
If physics are overridden, reset the idle time (fixes getting kicked while driving...
[xonotic/xonotic-data.pk3dir.git] / check-translations.sh
index fb1f68f32a64fecb6dd70b1334372defff54510c..0e1013cb6e085782bcd3444900347b2bc4db5866 100755 (executable)
 #!/bin/sh
 
-for VM in menu csprogs; do
-       case "$VM" in
-               csprogs)
-                       VMD=client
-                       ;;
-               *)
-                       VMD=$VM
-                       ;;
-       esac
+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 >&2
+fi
+
+if [ x"$mode" = x"txt" ]; then
        {
-               find qcsrc/"$VMD" -type f -not -name \*.po -not -name \*.txt
-               find qcsrc/common -type f -not -name \*.po -not -name \*.txt
-               find qcsrc/server -type f -name w_\*.qc
-       } | xgettext -LC -k_ -f- --from-code utf-8 -o "$VM".dat.pot >&2
-       for X in "$VM".dat.*.po; do
+               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
+                       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
+               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" <<EOF
+set fileencoding=utf-8
+set nobomb
+w
+q
+EOF
+                       if ! msgcat "$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
-               msgmerge -F -U "$X" "$VM".dat.pot >&2
-               msgattrib --untranslated "$X" | grep . > "$X".untranslated || rm -f "$X".untranslated
-               msgattrib --fuzzy "$X"        | grep . > "$X".fuzzy        || rm -f "$X".fuzzy
-               nu=$((`grep -c ^#: "$X".untranslated` + 0))
-               nf=$((`grep -c ^#: "$X".fuzzy`        + 0))
-               n=$(($nu + $nf))
+               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 "Untranslated: $nu"
-                       echo "Fuzzy:        $nf"
+                       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>'`
                        ltm=`grep '^"Language-Team: ' "$X" | cut -d ' ' -f 2- | cut -d '\\' -f 1 | egrep -v '<LL@li.org>|<EMAIL@ADDRESS>'`
                        echo "Translators:  $ltr, $ltm"
@@ -55,12 +181,15 @@ for VM in menu csprogs; do
                                echo "Cc:           $cc"
                        fi
                        if [ -n "$to" ]; then
-                               while :; do
+                               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
@@ -75,6 +204,9 @@ as you provided us with translations in the past, we kindly ask you
 to update the translation to match changes in the Xonotic source. Can
 you please work on them and provide updates to us?
 
+For reference, the current version of the translation file is at:
+http://git.xonotic.org/?p=xonotic/xonotic-data.pk3dir.git;a=blob;f=$X
+
 If you do not wish to be contacted for translation updates any more,
 please tell us in a reply to this message.
 
@@ -108,7 +240,7 @@ EOF
                                                                -e "set use_envelope_from=yes" \
                                                                -s "Need update for translations: $X" \
                                                                -c "$cc" \
-                                                               -b "divVerent@xonotic.org" \
+                                                               -b "admin@xonotic.org" \
                                                                -a $attach -- \
                                                                "$to"
                                                        break
@@ -119,10 +251,18 @@ EOF
                                        esac
                                done
                        fi
+               else
+                       echo "$X is complete!"
                fi
        done
-       for X in "$VM".dat.*.po.disabled; do
+
+       for X in common.*.po.disabled; do
                [ -f "$X" ] || continue
-               msgmerge -F -U "$X" "$VM".dat.pot >/dev/null 2>&1
+               if [ -n "$language" ]; then
+                       if [ x"${X#common.}" != x"$language.po" ]; then
+                               continue
+                       fi
+               fi
+               msgmerge -F -U "$X" common.pot >/dev/null 2>&1
        done
-done
+fi