#!/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.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
{
- 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
+ # 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
+ } | LC_ALL=C sort -t '"' -k4,4
+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" <<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"
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
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.
-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
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
+ # Note: no -N here, this is the point where we allow fuzzy matching.
+ msgmerge -F -U "$X" common.pot >/dev/null 2>&1
done
-done
+fi