Michael Bramer wrote:
> I make the first files from the ddtp db.
>
> Please look at http://ddtp.debian.org/debconf/maintainer and you will
> see a list of all package maintainers with debconf templates. On the
> pages you will find a list of debconf po file links.
I have written the attached program to aid in downloading from those
pages. When run in a package's directory, it downloads the page[1], parses
it, and tries to figure out what templates files to download. Current
modes of operation are:
- The default mode of operation: Download all tranlsations that are
marked as complete, and also download incomplete translations if the
translation does not exist at all locally. In theory this mode will
lose no local data and will get as many translations as it can.
- Only download translations that are marked as new on the page. This is
of limited value, since I'm not sure over what time period something
is considered "new" -- if it is just new today then this is useless
unless you run the script every day, etc.
- Download everything, even incomplete translations, overwriting
existing files that may heve more translations in them from non-DDTP
sources. Mostly useful so far if you are just starting out on
collecting translations for a package, or want to switch over entirely
to DDTP translations for your package.
- Download better translations -- ones which the DDTP has more strings
traslated than does the package in unstable.
It can also skip any translations that are not marked as updated.
None of these modes are perfect, but they seem to be the best I can do
with the available data. Some example runs:
joey@dragon:~package/debconf>gettrans
de.po: complete downloading (100% vs 66%)
ja.po: exists skipping (66% vs 66%)
pt_BR.po: exists skipping (66% vs 66%)
fr.po: exists skipping (66% vs 66%)
it.po: exists skipping (0% vs 66%)
da.po: complete downloading (100% vs 66%)
pl.po: exists skipping (0% vs 66%)
ru.po: exists skipping (66% vs 66%)
fi.po: exists skipping (66% vs 66%)
es.po: exists skipping (66% vs 66%)
joey@dragon:~package/mooix>gettrans --all
de.po: complete downloading (100% vs 0%)
joey@dragon:~package/base-config>gettrans --better --dry-run
de.po: better downloading (93% vs 59%)
ja.po: better downloading (65% vs 43%)
pt_BR.po: worse skipping (87% vs 100%)
fr.po: worse skipping (71% vs 100%)
it.po: better downloading (62% vs 43%)
da.po: better downloading (96% vs 90%)
pl.po: better downloading (71% vs 62%)
hu.po: better downloading (59% vs 40%)
nl.po: better downloading (62% vs 43%)
ru.po: worse skipping (68% vs 68%)
cs.po: better downloading (75% vs 53%)
es.po: better downloading (71% vs 53%)
It would be a lot better of course if it could merge existing with DDTP
translations. I suspect that in my base-config run above, I'd have lost
several translated strings while downloading the "better" translations
from the ddtp if I'd let it really download.
Security is another unaddressed issue.
It does look like it will work resonably well at least for complete
translations, but this program should be considered an experimental,
unsafe and unsecure prototype for now. Updated versions will be
available from http://cvs.kitenet.net/joey-cvs/bin/gettrans until
something better comes along.
One thing I do not understand is that, after downloading the complete da and
de translations for debconf, and verifying they look ok, and making sure I
have run debconf-updatepo, po-debconf is still dropping the descriotion of
debconf/priority for both languages. Dennis?
> Joey: If you remove the '.po' from the links, you will get the old
> debconf templates files. Now I don't add the encoding to this files.
> Make debconf-mergetemplate problems if I add the encoding in this old
> files? (like Description-de.ISO-8859-1: xxx)
I think that _might_ work, but I've never tried it.
--
see shy jo
[1] It would be marginally easier for automation if similar pages were
available per source package.
#!/usr/bin/perl
# First attempt at automatic debconf po file updates from the DDTP.
# Joey Hess <joeyh@debian.org>, GPL
#
# Run this in the directory of your package.
use warnings;
use strict;
sub usage {
print STDERR <<"EOF";
Usage: $0 [nbadh]
-n, --new Only download newly updated translations.
-b, --better Overwrite existing translations if DDTP has more complete ones.
-a, --all Download even incomplete tranlations, overwriting existing.
-d, --dry-run Do not really download anything.
-h, --help Show this help text.
Default behavior is to download all complete tranlations, as well as any
incomplete translations that are not translated at all yet locally.
Files are downloaded to debian/po/<ll>.po
Note that some modes may cause loss of data if you have translations
from third parties. Do a dry run first!
EOF
exit(1);
}
use Getopt::Long;
Getopt::Long::Configure("bundling");
my ($only_new, $all, $better, $dry_run);
GetOptions(
"new|n" => \$only_new,
"all|a" => \$all,
"better|b" => \$better,
"dry-run|d" => \$dry_run,
"help|h" => \&usage,
) || usage();
my $email='';
my $src='';
open (CONTROL, "<debian/control") || die "open debian/control: $!\n";
while (<CONTROL>) {
chomp;
if (/^Maintainer:\s*.*?<(.*)>/) {
$email=$1;
}
if (/^Source:\s*(.*)/) {
$src=$1;
}
}
close CONTROL;
if (! length $email) {
die "unable to find email address in debian/control\n";
}
if (! length $src) {
die "unable to find source package name in debian/control\n";
}
open (LIST, "wget -O - --quiet http://ddtp.debian.org/debconf/maintainer/$email |") ||
die "wget: $!\n";
while (<LIST>) {
if (/^\s*(\+)?\s*(\*)?\s*<\s*a\s*href="([^"]+)"\s*>([^\/]+)\/templates-([^.]+)\.po\s*<\/a>\s*(\d+)\/(\d+)\/(\d+)\s*(\d+)\/(\d+)/) {
my ($file, $pkg, $ll, $trans_in_unstable, $trans_from_ddtp,
$total_in_unstable, $trans_texts, $total_texts) =
($3, $4, $5, $6, $7, $8, $9, $10);
my $updated = (defined $1);
my $complete = (defined $2);
next if $pkg ne $src;
next if $trans_texts == 0;
print "$ll.po:". ' ' x (8 - length $ll);
my $pct = "(".int($trans_from_ddtp / $total_in_unstable * 100).
"% vs ".int($trans_in_unstable / $total_in_unstable * 100).
"%)";
if ($only_new && ! $updated) {
print "old\t\tskipping\t$pct\n";
next;
}
if (! $complete && ! $all) {
if ($better && $trans_from_ddtp > $trans_in_unstable) {
print "better\tdownloading\t$pct\n";
}
elsif (-e "debian/po/$ll.po") {
if (! $better) {
print "exists\tskipping\t$pct\n";
}
else {
print "worse\tskipping\t$pct\n";
}
next;
}
else {
print "new\tdownloading\t$pct\n";
}
}
else {
print "complete\tdownloading\t$pct\n";
}
system ("wget --quiet -O debian/po/$ll.po http://ddtp.debian.org/$file")
unless $dry_run;
}
}
close LIST || die "wget close: $!\n";
Attachment:
pgpTcj6_3e4hd.pgp
Description: PGP signature