case "$1" in
pot)
mode=pot
- mail=true
+ mail=false
+ ;;
+ txt)
+ mode=txt
+ mail=false
;;
po)
mode=po
mail=true
- language=
+ language=$2
;;
'')
echo "Sorry, you are not supposed to use this script."
;;
esac
-for VM in menu csprogs; do
- case "$VM" in
- csprogs)
- VMD=client
- ;;
- *)
- VMD=$VM
- ;;
- esac
-
- 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
- find qcsrc/server -type f -name w_\*.qc
- } | xgettext -LC -k_ -f- --from-code utf-8 -o "$VM".dat.pot >&2
- fi
+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"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 "divVerent@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