Fix the broken statistic generation
authorKlaus Ethgen <Klaus@Ethgen.de>
Fri, 10 Apr 2009 10:18:42 +0000 (10:18 +0000)
committerKlaus Ethgen <Klaus@Ethgen.de>
Fri, 10 Apr 2009 10:18:42 +0000 (10:18 +0000)
The output of msgfmt has different format if no fuzzy translations (or
even no translated) are available. I fixed that by parsing the output of
msgfmt more intelligent.

Drawback of the solution is that the parsing will not work if the output
of msgfmt use not the strings "translated messages", "fuzzy
translations" and "untranslated messages".

po/gen_translations_stats.sh

index eab62bc..36aeda9 100755 (executable)
@@ -17,12 +17,16 @@ echo
 (echo "Language  Comp(%) Trans Fuzzy Untrans Total"; \
 for i in *.po; do
        msgfmt --statistics -o /dev/null $i 2>&1 \
-       | sed 's/^\([0-9]\+ \)[^0-9]*\([0-9]\+ \)\?[^0-9]*\([0-9]\+ \)\?[^0-9]*$/\1\2\3/g' \
-       | awk '{ \
-               tot = $1 + $2 + $3; \
-               if (tot != 0) \
-                       printf "%8.0f|%s|%7.2f|%5d|%5d|%7d|%5d\n",\
-                       ($1*100/tot)*100, "'"${i%%.po}"'", $1*100/tot, tot-($2+$3), $2, $3, tot}' ;
+       | perl -ne '
+               my ($tr_done, $tr_fuzz, $tr_un) = (0, 0, 0);
+               $tr_done = $1 if /(\d+) translated messages/;
+               $tr_fuzz = $1 if /(\d+) fuzzy translations/;
+               $tr_un = $1 if /(\d+) untranslated messages/;
+               my $tr_tot = $tr_done + $tr_fuzz + $tr_un;
+               printf "%8.0f|%s|%7.2f|%5d|%5d|%7d|%5d\n",
+                       10000*$tr_done/$tr_tot, "'"${i%%.po}"'",
+                       100*$tr_done/$tr_tot, $tr_done, $tr_fuzz, $tr_un,
+                       $tr_tot if $tr_tot;';
 done | sort -t '|' -b -k1,1nr -k2,2 | sed 's/^ *[0-9]*//' | tr ' |' '| '
 ) | column -t -c 80 | tr '|' ' '
 echo