summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2010-06-07 15:19:31 (GMT)
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>2010-06-07 15:23:40 (GMT)
commitbf966d125d5c5fa7719ae9f9110db8742d5a4c85 (patch)
tree374aeb962bd7ea9b0665f303890e4a58eaeaee6e
parent83c6f16a17ff5ddee23e752e0eebc014bbc10f01 (diff)
downloadQt-bf966d125d5c5fa7719ae9f9110db8742d5a4c85.zip
Qt-bf966d125d5c5fa7719ae9f9110db8742d5a4c85.tar.gz
Qt-bf966d125d5c5fa7719ae9f9110db8742d5a4c85.tar.bz2
add check-ts target to auto-asses translation completeness
-rwxr-xr-xtranslations/check-ts.pl85
-rw-r--r--translations/check-ts.xq3
-rw-r--r--translations/translations.pri5
3 files changed, 92 insertions, 1 deletions
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) {
+ $_ = <IN>;
+ last if (/^TRANSLATIONS /);
+ print OUT $_;
+}
+while ($_ =~ /\\\n$/) {
+ $_ = <IN>;
+}
+print OUT "TRANSLATIONS =".$code."\n";
+while (<IN>) {
+ 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