translation-update-upstream/check-translation-completeness.sh

171 lines
3.9 KiB
Bash

#!/bin/bash
set -o errexit
# We need stable text format
export LANG=C
if ! test -d po-full ; then
echo >&2 "$0: You need \"po-full\" directory. Call this script only after ./upstream-collect.sh"
exit 1
fi
cd po-full
ALL_LNG="$(
for PO in */*.po ; do
LNG=${PO%.po}
LNG=${LNG##*/}
echo "$LNG"
done |
sort -u |
tr '\n' ' '
)"
#echo >&2 "$0 DBG: ALL_LNG=\"$ALL_LNG\""
for DOMAIN in * ; do
for LNG in $ALL_LNG ; do
# Sanitize to not contain "," or ".":
LNG_SN=${LNG//,/__COMMA__}
LNG_SN=${LNG_SN//./__PERIOD__}
DOMAIN_SN=${DOMAIN//,/__COMMA__}
DOMAIN_SN=${DOMAIN_SN//./__PERIOD__}
echo -n "$LNG_SN,$DOMAIN_SN,"
PO=$DOMAIN/$LNG.po
if test -f "$PO" ; then
msgfmt --statistics -o /dev/null $PO 2>&1
else
msgfmt --statistics -o /dev/null ../pot/$DOMAIN.pot 2>&1
fi
done
done |
#tee ../check-translation-completeness-DBG1.log |
(
# "F1 translated messages, F2 fuzzy translations, F3 untranslated messages." Some fields can be missing
IFS=,.
while read LNG DOMAIN F1 F2 F3 F4 ; do
LNG=${LNG//__COMMA__/,}
LNG=${LNG//__PERIOD__/.}
DOMAIN=${DOMAIN//__COMMA__/,}
DOMAIN=${DOMAIN//__PERIOD__/.}
TRANSLATED=0
UNTRANSLATED=0
FUZZY=0
if test -n "$F4" ; then
echo >&2 "$0: Too long output of \"msgfmt --statistics -o /dev/null po-full/$DOMAIN/$LNG.po\": \"$F4\""
exit 1
fi
for STRING in "$F1" "$F2" "$F3" "$F4" ; do
STRING=${STRING# }
case "$STRING" in
*" translated message" )
TRANSLATED=${STRING% translated message}
;;
*" translated messages" )
TRANSLATED=${STRING% translated messages}
;;
*" fuzzy translation" )
FUZZY=${STRING% fuzzy translation}
;;
*" fuzzy translations" )
FUZZY=${STRING% fuzzy translations}
;;
*" untranslated message" )
UNTRANSLATED=${STRING% untranslated message}
;;
*" untranslated messages" )
UNTRANSLATED=${STRING% untranslated messages}
;;
"" )
;;
* )
echo >&2 "$0: Unknown format of \"msgfmt --statistics -o /dev/null po-full/$DOMAIN/$LNG.po\": \"$STRING\""
exit 1
;;
esac
done
#echo >&2 -n "$0 DBG: LNG=$LNG DOMAIN=$DOMAIN F1=\"$F1\" F2=\"$F2\" F3=\"$F3\" F4=\"$F4\" TRANSLATED=$TRANSLATED UNTRANSLATED=$UNTRANSLATED FUZZY=$FUZZY"
let UNTRANSLATED+=FUZZY || :
let ALL=TRANSLATED+UNTRANSLATED || :
#echo >&2 " DBG: ALL=$ALL all_UNTRANSLATED=$UNTRANSLATED"
let PERCENTAGE=100"*"TRANSLATED/ALL || :
echo "\"$LNG\",\"$DOMAIN\",$PERCENTAGE,$UNTRANSLATED,$ALL"
done
) |
#tee ../check-translation-completeness-DBG2.log |
(
echo >../check-translation-completeness-by-domain.csv "\"Language\",\"Domain\",\"Translated %\",\"Untranslated #\",\"All #\""
tee -a ../check-translation-completeness-by-domain.csv
) |
sort |
(
echo >../check-translation-completeness-by-language.csv "\"Language\",\"Domain\",\"Translated %\",\"Untranslated #\",\"All #\""
tee -a ../check-translation-completeness-by-language.csv
) |
(
IFS=","
while read LNG DOMAIN PERCENTAGE UNTRANSLATED ALL ; do
LNG=${LNG//\"}
case $LNG in
ar )
LNG_NAME="Arabic"
;;
pt_BR )
LNG_NAME="Brazilian Portuguese"
;;
zh_CN )
LNG_NAME="Chinese Simplified"
;;
zh_TW )
LNG_NAME="Chinese Traditional"
;;
cs )
LNG_NAME="Czech"
;;
nl )
LNG_NAME="Dutch"
;;
fr )
LNG_NAME="French"
;;
de )
LNG_NAME="German"
;;
hu )
LNG_NAME="Hungarian"
;;
it )
LNG_NAME="Italian"
;;
ja )
LNG_NAME="Japanese"
;;
ko )
LNG_NAME="Korean"
;;
pl )
LNG_NAME="Polish"
;;
ru )
LNG_NAME="Russian"
;;
es )
LNG_NAME="Spanish"
;;
sv )
LNG_NAME="Swedish"
;;
* )
continue
;;
esac
echo "\"$LNG_NAME\",$DOMAIN,$PERCENTAGE,$UNTRANSLATED,$ALL"
done
) |
sort |
(
echo >../check-translation-completeness-supported.csv "\"Language\",\"Domain\",\"Translated %\",\"Untranslated #\",\"All #\""
cat >../check-translation-completeness-supported.csv
)
cd ..
zip check-translation-completeness.zip check-translation-completeness*.csv