]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - check-translations.sh
Merge branch 'TimePath/cleanup'
[xonotic/xonotic-data.pk3dir.git] / check-translations.sh
index db8f3114c210909e1a475f51b3f645f4def92a18..facee4a7bc8fc4d49fe5d2f2089ed56d4c227037 100755 (executable)
@@ -5,6 +5,10 @@ case "$1" in
                mode=pot
                mail=false
                ;;
+       txt)
+               mode=txt
+               mail=false
+               ;;
        po)
                mode=po
                mail=true
@@ -24,151 +28,215 @@ case "$1" in
                ;;
 esac
 
-for VM in menu csprogs; do
-       case "$VM" in
-               csprogs)
-                       VMD=client
-                       ;;
-               *)
-                       VMD=$VM
-                       ;;
-       esac
+if [ x"$mode" = x"pot" ]; then
+       {
+               find qcsrc -type f -name \*.\* -not -name \*.po -not -name \*.txt
+       } | xgettext -LC -k_ -f- --from-code utf-8 -F -o common.pot >&2
+fi
 
-       if [ x"$mode" = x"pot" ]; then
-               {
-                       find qcsrc/"$VMD" -type f -not -name \*.po -not -name \*.txt
-                       find qcsrc/common -type f -not -name \*.po -not -name \*.txt
-                       if [ x"$VM" = x"csprogs" ]; then
-                               find qcsrc/server -type f -name w_\*.qc
-                       elif [ x"$VM" = x"menu" ]; then
-                               find qcsrc/server -type f -name w_\*.qc | xargs grep ^REGISTER_WEAPON > weapons.qc.tmp
-                               echo "weapons.qc.tmp"
-                       fi
-               } | xgettext -LC -k_ -f- --from-code utf-8 -o "$VM".dat.pot >&2
-       fi
-
-       if [ x"$mode" = x"po" ]; then
-               for X in "$VM".dat.*.po; do
+if [ x"$mode" = x"txt" ]; then
+       {
+               echo "en English \"English\""
+               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#common.}" = x"en.po" ]; then
                                        continue
                                fi
                        fi
-                       for Y in ~/check-translations/"$X".*; do
-                               [ -f "$Y" ] || continue
-                               msgcat -F --use-first "$Y" "$X" > "$X".new
-                               mv "$X".new "$X"
-                       done
-                       msgmerge -F -U "$X" "$VM".dat.pot >&2
+                       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
+               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
-                       nu=$((`grep -c ^#: "$X".untranslated` + 0))
-                       nf=$((`grep -c ^#: "$X".fuzzy`        + 0))
-                       n=$(($nu + $nf))
-                       if [ $n -gt 0 ]; then
-                               echo "TODO for translation $X:"
-                               echo "Untranslated: $nu"
-                               echo "Fuzzy:        $nf"
-                               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"
-                               case "$ltr" in
-                                       '')
-                                               to=$ltm
+                       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 '<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"
+                       case "$ltr" in
+                               '')
+                                       to=$ltm
+                                       cc=
+                                       ;;
+                               *)
+                                       to=$ltr
+                                       if [ x"$ltr" = x"$ltm" ]; then
                                                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 [ $nu -gt 0 ]; then
-                                                                       attach="$attach $X.untranslated"
-                                                               fi
-                                                               if [ $nf -gt 0 ]; then
-                                                                       attach="$attach $X.fuzzy"
-                                                               fi
-                                                               {
-                                                                       cat <<EOF
+                                       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 <<EOF
 Hi,
 
 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.
 
 EOF
-                                                                       if [ $nu -gt 0 ]; then
-                                                                               cat <<EOF
+                                                               if [ $nu -gt 0 ]; then
+                                                                       cat <<EOF
 Attached to this message is a file
 $X.untranslated
 with $nu yet to be translated messages. Please translate them and reply
 with the file containing the translations in the "msgstr" fields.
 
 EOF
-                                                                       fi
-                                                                       if [ $nf -gt 0 ]; then
-                                                                               cat <<EOF
+                                                               fi
+                                                               if [ $nf -gt 0 ]; then
+                                                                       cat <<EOF
 Attached to this message is a file
 $X.fuzzy
 with $nf automatically generated translations. Please verify and/or fix
 them and reply with the file having been verified by you.
 
 EOF
-                                                                       fi
-                                                                       cat <<EOF
+                                                               fi
+                                                               cat <<EOF
 Thanks in advance,
 
 Team Xonotic
 EOF
-                                                               } | mutt \
-                                                                       -e "set from=\"divVerent@xonotic.org\"" \
-                                                                       -e "set use_from=yes" \
-                                                                       -e "set use_envelope_from=yes" \
-                                                                       -s "Need update for translations: $X" \
-                                                                       -c "$cc" \
-                                                                       -b "admin@xonotic.org" \
-                                                                       -a $attach -- \
-                                                                       "$to"
-                                                               break
-                                                               ;;
-                                                       n)
-                                                               break
-                                                               ;;
-                                               esac
-                                       done
-                               fi
+                                                       } | mutt \
+                                                               -e "set from=\"divVerent@xonotic.org\"" \
+                                                               -e "set use_from=yes" \
+                                                               -e "set use_envelope_from=yes" \
+                                                               -s "Need update for translations: $X" \
+                                                               -c "$cc" \
+                                                               -b "admin@xonotic.org" \
+                                                               -a $attach -- \
+                                                               "$to"
+                                                       break
+                                                       ;;
+                                               n)
+                                                       break
+                                                       ;;
+                                       esac
+                               done
                        fi
-               done
+               else
+                       echo "$X is complete!"
+               fi
+       done
 
-               for X in "$VM".dat.*.po.disabled; do
-                       [ -f "$X" ] || continue
-                       if [ -n "$language" ]; then
-                               if [ x"${X#*.dat.}" != x"$language.po" ]; then
-                                       continue
-                               fi
+       for X in common.*.po.disabled; do
+               [ -f "$X" ] || continue
+               if [ -n "$language" ]; then
+                       if [ x"${X#common.}" != x"$language.po" ]; then
+                               continue
                        fi
-                       msgmerge -F -U "$X" "$VM".dat.pot >/dev/null 2>&1
-               done
-       fi
-done
+               fi
+               msgmerge -F -U "$X" common.pot >/dev/null 2>&1
+       done
+fi