#!/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) # MediaWiki 'glamdrol' style sheet Copyright (C) 2005 by Jordą Polo Based on 'monobook', by Gabriel Wicke # # 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 "$(dirname $0)/variables" LC_ALL=C ODD_CHARS='�' CL=0 # counter for css style STATUS="OK" # Total status of translations while getopts ":c" opt; do case $opt in c) CORE_TEXTDOMAINS="wesnoth lib editor help units multiplayer anl tutorial" ;; esac done for BRANCH in $BRANCHES; do echo -e "Repository: $BLUE$BRANCH$ENDCOLOR" STATSFILE="statistics-$BRANCH.html" ERRORS="translation-errors-$BRANCH" nerror=0; nwarn=0; npo=0; nt=0; nu=0; nf=0 rm -f "$STATSFILE" echo -e " Battle for Wesnoth

Wesnoth translation stats


Last update: $(LC_TIME="en_US.UTF-8" date)


" >> "$STATSFILE" if [ -n "$CORE_TEXTDOMAINS" ]; then POFILES=$BRANCH/$(echo "$CORE_TEXTDOMAINS" | awk '$NF=$NF "*.po"' OFS="*.po $BRANCH/") else POFILES="$BRANCH/*.po" fi for files in $POFILES; do file=$(basename "$files") filename=$(basename "$file" .po) 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' "$BRANCH/$file") echo -n "Checking $file for UTF-8 inconsistencies... " if $ISUTF8 < "$BRANCH/$file" > /dev/null 2>&1; then if ! echo "$charset" | grep -qi "UTF-8"; then has_errors="yes" echo -e "${RED}FAILED; non UTF-8 charset declaration for UTF-8 content$ENDCOLOR" echo "$file: non UTF-8 charset declared for UTF-8 content; expect to see 'charset=UTF-8'." >> "$ERRORS" else echo -e "${GREEN}OK$ENDCOLOR" fi else if echo "$charset" | grep -qi "UTF-8"; then has_errors="yes" echo -e "${RED}FAILED; non UTF-8 content for UTF-8 charset declaration$ENDCOLOR" echo "$file: UTF-8 charset declared for non UTF-8 content; expect to see a non UTF-8 charset." >> "$ERRORS" else echo -e "${GREEN}OK$ENDCOLOR" fi fi echo -n "Checking $file for odd characters... " if grep -nH $ODD_CHARS "$BRANCH/$file" >> "$ERRORS"; then has_warnings="yes" echo -e "${RED}FAILED; odd characters found$ENDCOLOR" echo "$file: one or more odd character from the '$ODD_CHARS' set found." >> "$ERRORS" else echo -e "${GREEN}OK$ENDCOLOR" 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 "$BRANCH/$file" >> "$ERRORS"; then has_errors="yes" echo -e "${RED}FAILED$ENDCOLOR" else echo -e "${GREEN}OK$ENDCOLOR" fi fi 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 "$BRANCH/$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" printf '%s%.2f%s\n' " " >> "$STATSFILE" echo " " >> "$STATSFILE" printf '%s%.2f%s\n' " " >> "$STATSFILE" echo " " >> "$STATSFILE" printf '%s%.2f%s\n' " " >> "$STATSFILE" echo " " >> "$STATSFILE" n4=$(printf '%s%f\n' "scale=2; 9*" "$rt" | bc) n6=$(printf '%s%f\n' "scale=2; 9*" "$rf" | bc) n8=$(printf '%s%f\n' "scale=2; 9*" "$ru" | bc) printf '%s%.2f%s%.2f%s%.2f%s\n' " " >> "$STATSFILE" echo "" >> "$STATSFILE" done if [ "$npo" -eq 0 ]; then echo -e "${RED}No '${PO}.po' file under '$BRANCH'.$ENDCOLOR" exit 0 fi if [ "$nerror" -gt 0 ]; then echo -n -e "${RED}Fatal errors found. See '" tput smso; echo -n "$ERRORS"; tput rmso echo -ne "' for details.$ENDCOLOR" echo "" else echo -ne "${GREEN}No fatal errors found.$ENDCOLOR" echo "" if [ -s "$ERRORS" ]; then echo -n -e "$RED See '" tput smso; echo -n "$ERRORS"; tput rmso echo -ne "' for warnings.$ENDCOLOR" echo "" else rm -f "$ERRORS" fi fi if [ "$npo" = "$nerror" ]; then echo -en "${RED}All files have fatal errors.$ENDCOLOR" echo "" 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" 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; 9*" "$nrt" | bc) nrf=$(printf '%s%f\n' "scale=2; 9*" "$nrf" | bc) nru=$(printf '%s%f\n' "scale=2; 9*" "$nru" | bc) printf '%s%.2f%s%.2f%s%.2f%s\n' " " >> "$STATSFILE" echo "
Textdomain Status Translated % Fuzzy % Untranslated % Total Graph
$(basename "$filename") $st $t" "$rt" "$f" "$rf" "$u" "$ru" "$sum
Total $STATUS $nt" "$nrt" "$nf" "$nrf" "$nu" "$nru" "$((nt + nf + nu))

© 2003-$(date +%Y) The Battle for Wesnoth
Site design Copyright © 2017–2018 by Iris Morelle.
" >> "$STATSFILE" fi done # Exit with error count just because it may sense. exit $nerror