From 921984926996b001ea4dcd6d8142e7086a428a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 18 Sep 2008 15:36:37 +0300 Subject: [PATCH] Initial import --- compile.sh | 38 +++++++ pack.sh | 77 ++++++++++++++ statistics.sh | 276 ++++++++++++++++++++++++++++++++++++++++++++++++++ update.sh | 103 +++++++++++++++++++ variables | 37 +++++++ 5 files changed, 531 insertions(+) create mode 100755 compile.sh create mode 100755 pack.sh create mode 100755 statistics.sh create mode 100755 update.sh create mode 100644 variables diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..d900ec0 --- /dev/null +++ b/compile.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# Compile translations +# Copyright (C) 2007-2008 Andrius Štikonas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +source variables + +if [ ! $MSGFMT ]; then + echo -e "\E[31mThis program needs the msgfmt utility."; tput sgr0 + exit 1 +fi + +for BRANCH in $TRUNK $BRANCHES; do + echo -e "Repository: \E[34m$BRANCH"; tput sgr0 + DIR="$PREFIX-$BRANCH" + if [ ! -e "$MDIR/$BRANCH" ]; then + mkdir -p "$MDIR/$BRANCH" + fi + for file in `ls $DIR`; do + echo "Compiling $file"; + $MSGFMT "$DIR/$file" -o "$MDIR/$BRANCH/`echo $file | sed "s/."$LCODE".po/.mo/"`" + done + echo "" +done + +echo -ne "\E[32mFinished."; tput sgr0; echo " " diff --git a/pack.sh b/pack.sh new file mode 100755 index 0000000..e6f006b --- /dev/null +++ b/pack.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# Pack translations +# Copyright (C) 2007-2008 Andrius Štikonas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +source variables + +if [ ! $DIFF ]; then + echo -e "\E[31mThis program needs the diff utility."; tput sgr0 + exit 1 +fi + +if [ ! $TAR ]; then + echo -e "\E[31mThis program needs the tar utility."; tput sgr0 + exit 1 +fi + +if [ ! $BZIP2 ]; then + echo -e "\E[31mThis program needs the bzip2 utility."; tput sgr0 + exit 1 +fi + +counter=0 + +for BRANCH in $TRUNK $BRANCHES; do + echo -e "Branch: \E[34m$BRANCH"; tput sgr0 + DIR="$PREFIX-$BRANCH" + mkdir "$LCODE-temp" + for file in `ls $DIR/wesnoth*.$LCODE.po`; do + bfile=`basename $file` + echo -n "Processing catalog $bfile... "; + d=`echo "$bfile" | sed "s/.$LCODE.po//"` + if [ -f "$BRANCH/$d/$LCODE.po" ]; then + if ! $DIFF -q "$file" "$BRANCH/$d/$LCODE.po" > /dev/null ; then + mkdir "$LCODE-temp/$d" + cp "$file" "$LCODE-temp/$d/$LCODE.po" + echo -e "\E[32mOK"; tput sgr0 + counter=$(($counter+1)) + else + echo -e "\E[34mSkipping"; tput sgr0 + fi + else + mkdir -p "$LCODE-temp/$d" + cp "$file" "$LCODE-temp/$d/$LCODE.po" + echo -e "\E[32mOK"; tput sgr0 + counter=$(($counter+1)) + fi + done + + if [ -f "$LCODE-$BRANCH.tar.bz2" ]; then + echo "Removing old archive." + rm -f "$LCODE-$BRANCH.tar.bz2" + fi + + if [ ! $counter -eq 0 ]; then + $TAR --remove-files -cf $LCODE-$BRANCH.tar --transform s/$LCODE-temp// $LCODE-temp + $BZIP2 --best $LCODE-$BRANCH.tar + echo "New archive created." + else + rmdir $LCODE-temp + fi + echo "" +done + +echo -ne "\E[32mFinished."; tput sgr0; echo " " diff --git a/statistics.sh b/statistics.sh new file mode 100755 index 0000000..9e469a1 --- /dev/null +++ b/statistics.sh @@ -0,0 +1,276 @@ +#!/bin/bash +# Check translations, generate verbose statistics. +# Copyright (C) 2004 Recai Oktas +# Copyright (C) 2007-2008 Andrius Štikonas (my code can also be used under GPLv3 or any later) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as published by +# the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +source variables + +LC_NUMERIC="en_US.UTF-8" +ODD_CHARS='�' +CL=0 # counter for css style +STATUS="OK" # Total status of translations + +if [ ! $MSGFMT ]; then + echo -e "\E[31mThis program needs the msgfmt utility."; tput sgr0 + exit 1 +fi + +if [ ! $ISUTF8 ]; then + echo -e "\E[31mThis program needs the isutf8 utility."; tput sgr0 + exit 1 +fi + +for BRANCH in $TRUNK $BRANCHES; do + echo -e "Repository: \E[34m$BRANCH"; tput sgr0 + DIR="$PREFIX-$BRANCH" + STATSFILE="statistics-$BRANCH.xhtml" + ERRORS="translation-errors-$BRANCH" + nerror=0; nwarn=0; npo=0; nt=0; nu=0; nf=0 + rm -f $STATSFILE + + echo "> $STATSFILE + echo "\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo " " >> $STATSFILE + + echo " " >> $STATSFILE + echo " " >> $STATSFILE + echo " " >> $STATSFILE + echo " Battle for Wesnoth" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "
" >> $STATSFILE + echo "
" >> $STATSFILE + echo "
" >> $STATSFILE + echo " \"Wesnoth" >> $STATSFILE + echo "
" >> $STATSFILE + echo "
" >> $STATSFILE + echo "" >> $STATSFILE + echo "
" >> $STATSFILE + echo "
    " >> $STATSFILE + echo "
  • Home
  • " >> $STATSFILE + echo "
  • Play
  • " >> $STATSFILE + echo "" >> $STATSFILE + echo "
  • Create
  • " >> $STATSFILE + echo "
  • Forums
  • " >> $STATSFILE + echo "
  • Support
  • " >> $STATSFILE + echo "
  • Project
  • " >> $STATSFILE + echo "
  • Credits
  • " >> $STATSFILE + echo "
" >> $STATSFILE + echo "
" >> $STATSFILE + echo "" >> $STATSFILE + echo "

Wesnoth translation stats

" >> $STATSFILE + echo "

Last update: " >> $STATSFILE + LC_TIME="en_US.UTF-8" date >> $STATSFILE + echo "

" >> $STATSFILE + echo "

" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "
" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + + for dir in `ls $BRANCH/wesnoth* -d`; do + file=$DIR"/"`basename $dir`"."$LCODE".po"; + if [ ! -f $file ]; then + file=$BRANCH"/"`basename $dir`"/"$LCODE".po" + filename=$BRANCH`basename $dir`"/"$dir"."$LCODE + else + filename=`echo $file | sed s/.po//` + fi + npo=$(($npo + 1)); has_errors="no"; has_warnings="no"; + + # Extract the declared charset, may be we use this in future. + charset=`sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' $file` + + echo -n "Checking $file for UTF-8 inconsistencies... " + if $ISUTF8 <$file >/dev/null 2>&1; then + if ! echo $charset | grep -qi "UTF-8"; then + has_errors="yes" + echo -e "\E[31mFAILED; non UTF-8 charset declaration for UTF-8 content"; tput sgr0 + echo "$file: non UTF-8 charset declared for UTF-8 content; expect to see 'charset=UTF-8'." >> $ERRORS + else + echo -e "\E[32mOK"; tput sgr0 + fi + else + if echo $charset | grep -qi "UTF-8"; then + has_errors="yes" + echo -e "\E[31mFAILED; non UTF-8 content for UTF-8 charset declaration"; tput sgr0 + echo "$file: UTF-8 charset declared for non UTF-8 content; expect to see a non UTF-8 charset." >> $ERRORS + else + echo -e "\E[32mOK"; tput sgr0 + fi + fi + + echo -n "Checking $file for odd characters... " + if grep -nH $ODD_CHARS $file >> $ERRORS; then + has_warnings="yes" + echo -e "\E[31mFAILED; odd characters found"; tput sgr0 + echo "$file: one or more odd character from the '$ODD_CHARS' set found." >> $ERRORS + else + echo -e "\E[32mOK"; tput sgr0 + fi + + # Makes sense only if the file passed the UTF-8 check. + if [ "$has_errors" = "no" ]; then + echo -n "Checking $file with msgfmt... " + if ! LC_MESSAGES=C $MSGFMT --check -o /dev/null $file >> $ERRORS; then + has_errors="yes" + echo -e "\E[31mFAILED"; tput sgr0 + else + echo -e "\E[32mOK"; tput sgr0 + fi + fi + r=0; rf=0; ru=0; t=0; u=0; f=0; rt=0 + if [ "$has_errors" = "yes" ]; then + nerror=$(($nerror + 1)) + sum=0 + st="Error" + if [ $STATUS = "OK" ]; then + STATUS="Error" + fi + if [ $STATUS = "Warning" ]; then + STATUS="Error" + fi + else + stat=`LC_MESSAGES=C $MSGFMT --statistics -o /dev/null $file 2>&1` + t=`echo "$stat" | sed -ne 's/\([0-9]\+\) translated .*/\1/p'`; t=${t:-0} + u=`echo "$stat" | sed -ne 's/.* \([0-9]\+\) untranslated .*/\1/p'`; u=${u:-0} + f=`echo "$stat" | sed -ne 's/.* \([0-9]\+\) fuzzy translation.*/\1/p'`; f=${f:-0} + + sum=$(($t + $f + $u)) + if [ ! "$sum" -eq 0 ]; then + rt=`printf '%s%d%s%d\n' "scale=2; 100*" $t "/" $sum | bc` + fi + + if [ ! "$sum" -eq 0 ]; then + rf=`printf '%s%d%s%d\n' "scale=2; 100*" $f "/" $sum | bc` + fi + + if [ ! "$sum" -eq 0 ]; then + ru=`printf '%s%d%s%d\n' "scale=2; 100*" $u "/" $sum | bc` + fi + + nt=$(($nt + $t)); nu=$(($nu + $u)); nf=$(($nf + $f)) + + st="OK" + if [ "$has_warnings" = "yes" ]; then + nwarn=$(($nwarn + 1)) + st='Warning' + if [ "$STATUS" = "OK" ]; then + STATUS='Warning' + fi + fi + fi + + echo "" >> $STATSFILE + CL=$(( ($CL+1)%2 )) + echo " " >> $STATSFILE + echo " " >> $STATSFILE + echo " " >> $STATSFILE + printf '%s%d%s%.2f%s\n' " " >> $STATSFILE + echo " " >> $STATSFILE + printf '%s%d%s%.2f%s\n' " " >> $STATSFILE + echo " " >> $STATSFILE + printf '%s%d%s%.2f%s\n' " " >> $STATSFILE + echo " " >> $STATSFILE + n4=`printf '%s%f\n' "scale=2; 3*" $rt | bc` + n6=`printf '%s%f\n' "scale=2; 3*" $rf | bc` + n8=`printf '%s%f\n' "scale=2; 3*" $ru | bc` + printf '%s%.2f%s%.2f%s%.2f%s\n' " " >> $STATSFILE + echo "" >> $STATSFILE + done + + if [ "$npo" -eq 0 ]; then + echo -e "\E[31mNo '${PO}.po' file under '$DIR'."; tput sgr0 + exit 0 + fi + + if [ "$nerror" -gt 0 ]; then + echo -n -e "\E[31mFatal errors found. See '" + tput smso; echo -n "$ERRORS"; tput rmso + echo -e "' for details."; tput sgr0 + else + echo -e "\E[32mNo fatal errors found."; tput sgr0 + + if [ -s "$ERRORS" ]; then + echo -n -e "\E[31m See '" + tput smso; echo -n "$ERRORS"; tput rmso + echo -e "' for warnings."; tput sgr0 + else + rm -f $ERRORS + fi + fi + + if [ "$npo" = "$nerror" ]; then + echo -e "\E[31mAll files have fatal errors."; tput sgr0 + else + sum=$((${nt} + ${nf} + ${nu})) + nrt=`printf '%s%d%s%d\n' "scale=2; 100*" $nt "/" $sum | bc` + nrf=`printf '%s%d%s%d\n' "scale=2; 100*" $nf "/" $sum | bc` + nru=`printf '%s%d%s%d\n' "scale=2; 100*" $nu "/" $sum | bc` + + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + printf '%s%.2f%s\n' "" >> $STATSFILE + echo "" >> $STATSFILE + printf '%s%.2f%s\n' "" >> $STATSFILE + echo "" >> $STATSFILE + printf '%s%.2f%s\n' "" >> $STATSFILE + echo "" >> $STATSFILE + + nrt=`printf '%s%f\n' "scale=2; 3*" $nrt | bc` + nrf=`printf '%s%f\n' "scale=2; 3*" $nrf | bc` + nru=`printf '%s%f\n' "scale=2; 3*" $nru | bc` + + printf '%s%.2f%s%.2f%s%.2f%s\n' "" >> $STATSFILE + echo "" >> $STATSFILE + echo "
FileStatustranslated%fuzzy%untranslated%totalgraph
`basename $filename`$st$t" $rt "$f" $rf "$u" $ru "$sum\"translated\"/\"fuzzy\"/\"untranslated\"/
Total$STATUS$nt" $nrt "$nf" $nrf "$nu" $nru "$((${nt} + ${nf} + ${nu}))\"translated\"/\"fuzzy\"/\"untranslated\"/
" >> $STATSFILE + echo "
" >> $STATSFILE + echo "

" >> $STATSFILE + echo "
" >> $STATSFILE + echo "" >> $STATSFILE + echo "
" >> $STATSFILE + echo "© 2003-"`date +%Y`" The Battle for Wesnoth
" >> $STATSFILE + echo "
" >> $STATSFILE + echo "> $STATSFILE + echo "alt=\"Valid XHTML 1.1!\" height=\"31\" width=\"88\" />" >> $STATSFILE + echo "
" >> $STATSFILE + echo "
" >> $STATSFILE + echo "
" >> $STATSFILE + echo "" >> $STATSFILE + echo "" >> $STATSFILE + fi + echo "" +done + +# Exit with error count just because it may sense. +exit $nerror diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..552271f --- /dev/null +++ b/update.sh @@ -0,0 +1,103 @@ +#!/bin/bash +# Update translations from subversion repository and merge them +# Copyright (C) 2007-2008 Andrius Štikonas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +source variables + +if [ ! $SVN ]; then + echo -e "\E[31mThis program needs the svn utility."; tput sgr0 + exit 1 +fi + +if [ ! $MSGFMT ]; then + echo -e "\E[31mThis program needs the msgfmt utility."; tput sgr0 + exit 1 +fi + +if [ ! $MSGMERGE ]; then + echo -e "\E[31mThis program needs the msgmerge utility."; tput sgr0 + exit 1 +fi + +if [ ! $MSGINIT ]; then + echo -e "\E[31mThis program needs the msginit utility."; tput sgr0 + exit 1 +fi + +echo -e "Language: \E[31m$LCODE"; tput sgr0 +echo "" + +if [ ! -z $TRUNK ]; then + echo -e "Updating repository: \E[34mtrunk" + $SVN co "$REPO/$TRUNK/po" $TRUNK + tput sgr0 + if [ ! -e "$PREFIX-$TRUNK" ]; then + mkdir "$PREFIX-$TRUNK" + fi +fi + +for BRANCH in $BRANCHES; do + echo -e "Updating repository: \E[34m$BRANCH" + $SVN co "$REPO/branches/$BRANCH/po" $BRANCH + tput sgr0 +done + +for BRANCH in $BRANCHES; do + if [ ! -e "$PREFIX-$BRANCH" ]; then + mkdir "$PREFIX-$BRANCH" + fi +done + +for BRANCH in $TRUNK $BRANCHES; do + SVNDIR=$BRANCH + DIR="$PREFIX-$BRANCH" + echo -e "Merging: \E[34m$BRANCH"; tput sgr0 + for dir in `ls $SVNDIR/wesnoth* -d`; do + echo "Processing "`basename $dir`"."$LCODE".po" + stat=`LC_MESSAGES=C $MSGFMT --statistics -o /dev/null $dir"/"$LCODE".po" 2>&1` + u=`echo "$stat" | sed -ne 's/.* \([0-9]\+\) untranslated .*/\1/p'`;u=${u:-0} + f=`echo "$stat" | sed -ne 's/.* \([0-9]\+\) fuzzy translation.*/\1/p'`; f=${f:-0} + file=$DIR"/"`basename $dir`"."$LCODE".po" + if [ -f $dir"/"$LCODE".po" ]; then + if [ $(($u+$f)) == 0 ]; then + echo -e "\E[32mFile is translated."; tput sgr0 + if [ -f $DIR"/"`basename $dir`"."$LCODE".po" ]; then + echo -e "\E[32mRemoving from $DIR."; tput sgr0 + rm -f $file + fi + else + if [ -f "$DIR/"`basename $dir`".$LCODE.po" ]; then + echo -e "\E[34mMerging:"; tput sgr0 + $MSGMERGE -U -v $file $dir"/"`basename $dir`".pot" + rm -f $file~ + else + echo -e "\E[31mCopying:"; tput sgr0 + cp $dir"/"$LCODE".po" $file + fi + fi + else + if [ ! -f $file ]; then + echo -e "\E[31mNo po file in repository. Running msginit."; tput sgr0 + echo "$dir" + $MSGINIT -i "$dir/`basename $dir`.pot" -o $file + else + echo -e "\E[31mNo po file in repository. Found file in workspace."; tput sgr0 + fi + fi + echo "" + done +done +echo -ne "\E[32mFinished."; tput sgr0; echo " " diff --git a/variables b/variables new file mode 100644 index 0000000..37a8424 --- /dev/null +++ b/variables @@ -0,0 +1,37 @@ +#!/bin/bash +# You would probably need to make some adjustments to variables. +# Copyright (C) 2008 Andrius Štikonas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +LCODE="lt" # Language code. Only 1 language is supported. + +# Repositories +REPO="http://svn.gna.org/svn/wesnoth" +BRANCHES="1.4" # one or multiple branches separated by space. Can be blank. +TRUNK="" # "trunk" or "" + +#Paths +MDIR="mo" +PREFIX="workspace" + +#Binaries +SVN=`which svn 2> /dev/null` +MSGFMT=`which msgfmt 2> /dev/null` +MSGMERGE=`which msgmerge 2> /dev/null` +MSGINIT=`which msginit 2> /dev/null` +ISUTF8=`which isutf8 2> /dev/null` +TAR=`which tar 2> /dev/null` +BZIP2=`which bzip2 2> /dev/null` +DIFF=`which diff 2> /dev/null`