From bf966d125d5c5fa7719ae9f9110db8742d5a4c85 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 17:19:31 +0200 Subject: add check-ts target to auto-asses translation completeness --- translations/check-ts.pl | 85 +++++++++++++++++++++++++++++++++++++++++++ translations/check-ts.xq | 3 ++ translations/translations.pri | 5 ++- 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100755 translations/check-ts.pl create mode 100644 translations/check-ts.xq diff --git a/translations/check-ts.pl b/translations/check-ts.pl new file mode 100755 index 0000000..7b46bf5 --- /dev/null +++ b/translations/check-ts.pl @@ -0,0 +1,85 @@ +#! /usr/bin/perl -w + +use strict; + +# "qt" must come last to avoid prefix matching. +my @groups = ("assistant", "designer", "linguist", "qt_help", "qtconfig", "qvfb", "qt"); + +my %scores = (); +my %langs = (); + +my $files = join("\n", <*.ts>); +my $res = `xmlpatterns -param files=\"$files\" check-ts.xq`; +for my $i (split(/ /, $res)) { + $i =~ /^([^.]+).ts:(.*)$/; + my ($fn, $pc) = ($1, $2); + for my $g (@groups) { + if ($fn =~ /^${g}_(.*)$/) { + my $lang = $1; + $scores{$g}{$lang} = $pc; + $langs{$lang} = 1; + last; + } + } +} + +# now we move "qt" to the front, as it should be the first column. +pop @groups; +unshift @groups, "qt"; + +my $code = ""; + +print "L10n "; +for my $g (@groups) { + print " ".$g." "; +} +print "\n"; +for my $lang (sort(keys(%langs))) { + printf "%-5s ", $lang; + my $qt = 1; + my $rest = 1; + my $line = ""; + for my $g (@groups) { + my $pc = $scores{$g}{$lang}; + $pc = "0" if !defined($pc); + if (int($pc) < 98 or !$qt) { + if ($g eq "qt") { + $qt = 0; + } else { + $rest = 0; + } + } else { + $line .= " ".$g."_".$lang.".ts"; + } + printf " %-".(length($g)+1)."s", $pc; + } + if ($qt) { + $code .= " \\\n ".$line; + if (!$rest) { + print " (partial)"; + } + } else { + print " (excluded)"; + } + print "\n"; +} + +my $fn = "translations.pro"; +my $nfn = $fn."new"; +open IN, $fn or die; +open OUT, ">".$nfn or die; +while (1) { + $_ = ; + last if (/^TRANSLATIONS /); + print OUT $_; +} +while ($_ =~ /\\\n$/) { + $_ = ; +} +print OUT "TRANSLATIONS =".$code."\n"; +while () { + print OUT $_; +} +close OUT; +close IN; +rename $nfn, $fn; diff --git a/translations/check-ts.xq b/translations/check-ts.xq new file mode 100644 index 0000000..2d6404c --- /dev/null +++ b/translations/check-ts.xq @@ -0,0 +1,3 @@ +for $file in tokenize($files, codepoints-to-string(10)) + let $fresh := doc($file)/TS/context/message[not (translation/@type = 'obsolete')] + return concat($file, ":", count($fresh/translation[not (@type = 'unfinished')]) * 100 idiv count($fresh)) diff --git a/translations/translations.pri b/translations/translations.pri index 37295ff..9ab72fc 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -73,5 +73,8 @@ ts-qvfb.depends = sub-tools ts.depends = ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb +check-ts.commands = (cd $$PWD && perl check-ts.pl) +check-ts.depends = ts + QMAKE_EXTRA_TARGETS += ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb \ - ts + ts check-ts -- cgit v0.12