diff options
Diffstat (limited to 'po/language_statistics.sh')
-rwxr-xr-x | po/language_statistics.sh | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/po/language_statistics.sh b/po/language_statistics.sh new file mode 100755 index 0000000..85bcaf8 --- /dev/null +++ b/po/language_statistics.sh @@ -0,0 +1,124 @@ +#!/usr/bin/env bash + +# +# usage() : short help +# +usage() { + cat <<EOF +Usage : + $0 [--help] [-e|--export-html] languages +EOF +} + +# +# count_msgids() : count the original strings +# +count_msgids() { + cat | grep -E '^msgid\s+' | wc -l +} + +# +# count_original_words() : count the words in the original strings +# +count_original_words() { + cat | grep ^msgid | sed 's/^msgid "//g;s/"$//g' | wc -w +} + +# +# statistics() : process statistics on translations +# +statistics() { + PO_FILES="$(mktemp -t XXXXXXXXXX.pofiles)" + find . -iname "$lang.po" > $PO_FILES + PO_MESSAGES="$(mktemp -t XXXXXXXXXX.po)" + msgcat --files-from=$PO_FILES --output=$PO_MESSAGES + REV_DATE=$(grep "PO-Revision-Date: [1-9]" $PO_MESSAGES |cut -d " " -f2) + TOTAL=$(msgattrib --force-po --no-obsolete $PO_MESSAGES | count_msgids) + TOTAL_WC=$(msgattrib --force-po --no-obsolete --no-wrap $PO_MESSAGES | count_original_words) + FUZZY=$(msgattrib --force-po --only-fuzzy --no-obsolete $PO_MESSAGES | count_msgids) + # Fully translated files always return one remaining fuzzy entry... + if [ $FUZZY = 1 ] + then FUZZY=0 + fi + TRANSLATED=$(msgattrib --force-po --translated --no-fuzzy --no-obsolete $PO_MESSAGES | count_msgids) + TRANSLATED_WC=$(msgattrib --force-po --translated --no-fuzzy --no-obsolete --no-wrap $PO_MESSAGES | count_original_words) + rm -f $PO_FILES $PO_MESSAGES +} + +# +# show_text() : show the statistics in a readable text format +# +show_text() { + for lang in $LANGUAGES ; do + statistics + echo " $lang: $(($TRANSLATED*100/$TOTAL))% ($TRANSLATED/$TOTAL) translated, $(($FUZZY*100/$TOTAL))% ($FUZZY) fuzzy, $(($TRANSLATED_WC*100/$TOTAL_WC))% ($TRANSLATED_WC/$TOTAL_WC) words translated (rev. date: $REV_DATE)" + done +} + +# +# show_html() : show the statistics in HTML format +# +show_html() { + echo "<html> + <body> + <table> + <caption>Translation status of the Inkscape user interface</caption> + <thead> + <tr> + <td>Language</td><td>Status</td><td>Untranslated</td><td>Fuzzy</td><td>Total</td><td>Last changed</td> + </tr> + </thead> + <tbody>" + for lang in $LANGUAGES ; do + statistics + echo " <tr><td>$lang</td><td><progress max='100' value='$(($TRANSLATED*100/$TOTAL))' title='$(($TRANSLATED*100/$TOTAL))%'>$(($TRANSLATED*100/$TOTAL))%</progress></td><td>$(($TOTAL-$TRANSLATED-$FUZZY)) ($((($TOTAL-$TRANSLATED-$FUZZY)*100/$TOTAL))%)</td><td>$FUZZY ($(($FUZZY*100/$TOTAL))%)</td><td>$TOTAL</td><td>$REV_DATE</td></tr>" + done + echo " </tbody> + </table> + </body> +</html>" +} + +user_lang= +export_html=0 + +# Command line options +while test $# -gt 0 +do + case $1 in + -h | --help) + usage + exit 0 + ;; + -e | --export-html) + export_html=1 + ;; + -*) echo "$0 : invalid option $1" >&2 + usage + exit 1 + ;; + *) + user_lang=$@ + break + ;; + esac + shift +done + + +set -eu +#set -o pipefail + +if [ "$user_lang" ] + then LANGUAGES="$user_lang" + else LANGUAGES="$(grep -v "^\#" ./LINGUAS)" +fi + +if [ $export_html = 1 ] + then show_html + else show_text +fi + + +# -*- mode: sh; sh-basic-offset: 4; indent-tabs-mode: nil; -*- +# vim: set filetype=sh sw=4 sts=4 expandtab autoindent: |