QGIS/scripts/tsstat.pl

215 lines
8.3 KiB
Perl
Raw Normal View History

#!/usr/bin/perl
2012-10-06 13:10:25 +02:00
###########################################################################
# tsstat.pl
# ---------------------
# begin : March 2009
# copyright : (C) 2009 by Juergen E. Fischer
# email : jef at norbit dot de
###########################################################################
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
###########################################################################
use strict;
use warnings;
use Locale::Language;
use Locale::Country;
my @lang;
# script to generate a html list of the qgis application translations
# showing the percentage finished and the names of the translators
# without argument it generates html which is used in the about-dialog of the application
# output to std-out, to be piped to doc/TRANSLATORS so it can be used in dialog
# scripts/tsstat.pl > doc/TRANSLATORS
# this version needs flag images from the resources
# with argument 'site' a more complete html page is create to be used on a website
# scripts/tsstat.pl site > page.html
# this version needs flag images in a directory 'flags'
# translator names here as a hash where the key is the lang_country code used for the ts file name
my $translators= {
af => '',
ar => 'Ichaouia Amine, Hosham Munier',
2012-05-25 16:42:20 +02:00
bg => 'Захари Савов, Jordan Tzvetkov',
bs => 'Almir Karabegovic',
ca => 'Albert F, Pau Reguant Ridó, Xavier Roijals',
cs => 'Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček',
2014-02-20 22:29:07 +07:00
da => 'Jacob Overgaard Madsen, Bo Victor Thomsen',
2012-05-25 16:42:20 +02:00
de => 'Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho',
2012-10-08 15:47:42 +02:00
es => 'Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo',
el => 'Theodoros Vakkas, Ioannis Tsimpiris, Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves',
et => 'Veiko Viil',
eu => 'Asier Sarasua Garmendia, Irantzu Alvarez',
2013-06-06 09:06:18 +02:00
fa => 'Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan',
fi => 'Kari Salovaara, Marko Järvenpää',
2014-02-20 23:26:56 +01:00
fr => 'Stéphane Brunner, Olivier Dalang, Nicolas Damien, Michael Douchin, Régis Haubourg, Matthias Khun, Sylvain Maillard, Jean-Roc Morreale, Mehdi Semchaoui',
gl => 'Xan Vieiro',
2013-11-13 08:56:23 +02:00
hi => 'Harish Kumar Solanki',
2012-05-25 16:42:20 +02:00
hu => 'Zoltan Siki',
hr => 'Zoran Jankovic',
is => 'Ásta Kristín Óladóttir, Thordur Ivarsson',
id => 'Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa',
2013-09-03 16:04:40 +02:00
it => 'Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon',
2013-05-27 20:33:27 +02:00
ja => 'BABA Yoshihiko, Yoichi Kayama, Minoru Akagi, Takayuki Nuimura, Takayuki Mizutani, Norihiro Yamate',
ka => 'Shota Murtskhvaladze, George Machitidze',
2013-03-19 08:02:52 +01:00
km => 'Khoem Sokhem',
ko => 'OSGeo Korean Chapter',
lo => 'Anousak Souphavanh, Soukanh Lathsavong',
2012-05-25 16:42:20 +02:00
lv => 'Maris Nartiss, Pēteris Brūns',
lt => 'Paulius Litvinas, Tomas Straupis, Kestas M',
ml => 'Vinayan Parameswaran',
2012-05-25 16:42:20 +02:00
mn => 'Bayarmaa Enkhtur',
2013-10-15 20:22:35 +02:00
mr => '',
nb => 'James Stott, Maléne Peterson',
nl => 'Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp',
pl => 'Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder ',
pt_BR => 'Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros ',
pt_PT => 'Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar',
ro => 'Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar',
ru => 'Alexander Bruy, Artem Popov',
sk => 'Lubos Balazovic, Jana Kormanikova, Ivan Mincik',
sl => 'Jože Detečnik, Dejan Gregor, Jaka Kranjc',
sq => '',
sr_Latn => 'Goran Ivanković',
sr_Cyrl => 'Goran Ivanković',
2012-10-09 09:01:24 +02:00
sv => 'Lars Luthman, Magnus Homann, Victor Axbom',
sw => '',
ta => '',
te => '',
2012-05-25 16:42:20 +02:00
th => 'Man Chao',
tl => 'Kathrina Gregana',
tr => 'Osman Yalçın YILMAZ',
uk => 'Alexander Bruy',
2013-07-24 20:26:40 +02:00
vi => 'Phan Anh, Bùi Hữu Mạnh',
zh_CN => 'Calvin Ngei, Zhang Jun, Richard Xie',
2012-07-04 01:21:35 +02:00
zh_TW => 'Nung-yao Lin',
};
2012-05-25 16:42:20 +02:00
my $maxn;
for my $i (<i18n/qgis_*.ts>) {
2012-05-25 16:42:20 +02:00
my ($langcode) = $i =~ /i18n\/qgis_(.*).ts/;
2013-05-19 19:23:52 +02:00
next if $langcode eq "en";
my $translator = $translators->{$langcode} || "(orphaned)";
my $charset = "";
my $lc = $langcode;
if( $langcode =~ /(.*)_Latn/ ) {
$charset = " (latin)";
$langcode = $1;
} elsif( $langcode =~ /(.*)_Cyrl/ ) {
$charset = " (cyrillic)";
$langcode = $1;
}
2012-05-25 16:42:20 +02:00
my $name;
if($langcode =~ /(.*)_(.*)/) {
my $lang = code2language(lc $1);
my $country = code2country(lc $2);
$name = "$lang ($country)";
} else {
$name = code2language(lc $langcode);
}
$name .= $charset;
2012-05-25 16:42:20 +02:00
open F, "lrelease $i|";
my($translations,$finished,$unfinished);
my $untranslated=0;
2012-05-25 16:42:20 +02:00
while(<F>) {
if(/Generated (\d+) translation\(s\) \((\d+) finished and (\d+) unfinished\)/) {
$translations=$1;
$finished=$2;
$unfinished=$3;
} elsif(/Ignored (\d+) untranslated source text\(s\)/) {
$untranslated=$1;
}
}
2012-05-25 16:42:20 +02:00
close F;
2012-05-25 16:42:20 +02:00
my $n = $translations+$untranslated;
$maxn = $n unless defined $maxn;
if( $n>$maxn ) {
2014-06-13 00:52:30 +02:00
print STDERR "$i: more translations than others. ($n>$maxn)\n";
$maxn = $n;
}
push @lang, {
code=>$langcode,
name=>$name, n=>$n,
translations=>$translations,
finished=>$finished,
unfinished=>$unfinished,
untranslated=>$untranslated,
translator=>$translator
};
}
2012-05-25 16:42:20 +02:00
foreach my $l (@lang) {
$l->{diff} = $l->{n}-$maxn;
$l->{percentage} = ($l->{finished}+$l->{unfinished}/2)/$maxn*100;
}
2012-05-25 16:42:20 +02:00
if ( @ARGV && $ARGV[0] eq "site") {
2012-05-25 16:42:20 +02:00
print "<html><body>";
print "<head>";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>";
print "<style>";
print "body{font-family:sans-serif;}";
print "table {font-size:80%;border-collapse: collapse;}";
print "td {border-left:solid 1px #aaaaaa;border-right:solid 1px #aaaaaa;padding:1px 10px;}";
print ".bartodo{ background-color:red;width:100px;height:20px;}";
print ".bardone{ background-color:green;width:80px;height:20px;font-size:80%;text-align:center;padding-top:4px;height:16px;color:white;}";
print "</style></head>";
print "<table>";
print "<tr><td colspan=\"2\" style=\"width:250px;\">Language</td><td>Count</td><td>Finished</td><td>Unfinished</td><td>Untranslated</td><td>Percentage</td><td>Translators</td></tr>\n";
for my $l (sort { $b->{percentage} <=> $a->{percentage} } @lang) {
printf "\n<tr>"
. '<td><img src="flags/%s.png"></td><td nowrap>%s</td>'
. '<td nowrap>%s</td><td>%d</td><td>%d</td><td>%d</td>'
. '<td><div class="bartodo"><div class="bardone" style="width:%dpx">%.1f</div></div></td>'
. '<td>%s</td>'
. '</tr>',
$l->{code}, $l->{name},
$l->{diff}==0 ? $l->{n} : "$l->{n} ($l->{diff})",
$l->{finished}, $l->{unfinished}, $l->{untranslated},
$l->{percentage}, $l->{percentage},
$l->{translator};
2012-05-25 16:42:20 +02:00
}
print "</table></body></html>\n";
} else {
print "<style>";
print "table {font-size:80%;}";
print "th {text-align:left; }";
print ".bartodo{ background-color:red;width:100px;height:20px;}";
print ".bardone{ background-color:green;width:80px;height:20px;font-size:80%;text-align:center;padding-top:4px;height:16px;color:white;}";
print "</style>";
print "<table>";
print "<tr><th colspan=\"2\" style=\"width:250px;\">Language</th><th>Finished %</th><th>Translators</th></tr>\n";
for my $l (sort { $b->{percentage} <=> $a->{percentage} } @lang) {
printf "\n<tr>"
. '<td><img src="qrc:/images/flags/%s.png"></td><td>%s</td>'
. '<td><div title="finished:%d unfinished:%d untranslated:%d" class="bartodo"><div class="bardone" style="width:%dpx">%.1f</div></div></td>'
2012-05-25 16:42:20 +02:00
. '<td>%s</td>'
. '</tr>',
$l->{code}, $l->{name},
$l->{finished}, $l->{unfinished}, $l->{untranslated},
2012-05-25 16:42:20 +02:00
$l->{percentage}, $l->{percentage},
$l->{translator};
2012-05-25 16:42:20 +02:00
}
print "</table>\n";
}