po plugin: create missing POT/PO files in needsbuild hook

Signed-off-by: intrigeri <intrigeri@boum.org>
master
intrigeri 2008-10-15 05:22:41 +02:00
parent f42cf38076
commit 58c77a01f7
2 changed files with 32 additions and 15 deletions

View File

@ -96,10 +96,22 @@ sub checkconfig () { #{{{
push @{$config{wiki_file_prune_regexps}}, qr/\.pot$/;
} #}}}
sub refreshpot ($) { #{{{
sub potfile ($) { #{{{
my $masterfile=shift;
(my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/);
my $potfile=File::Spec->catfile($dir, $name . ".pot");
return File::Spec->catfile($dir, $name . ".pot");
} #}}}
sub pofile ($$) { #{{{
my $masterfile=shift;
my $lang=shift;
(my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/);
return File::Spec->catfile($dir, $name . "." . $lang . ".po");
} #}}}
sub refreshpot ($) { #{{{
my $masterfile=shift;
my $potfile=potfile($masterfile);
my %options = ("markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0);
my $doc=Locale::Po4a::Chooser::new('text',%options);
$doc->read($masterfile);
@ -114,8 +126,7 @@ sub refreshpofiles ($@) { #{{{
my $masterfile=shift;
my @pofiles=@_;
(my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/);
my $potfile=File::Spec->catfile($dir, $name . ".pot");
my $potfile=potfile($masterfile);
error("[po/refreshpofiles] POT file ($potfile) does not exist") unless (-e $potfile);
foreach my $pofile (@pofiles) {
@ -139,16 +150,22 @@ sub needsbuild () { #{{{
istranslation($page);
}
# refresh POT and PO files as needed
foreach my $file (@$needsbuild) {
my $page=pagename($file);
# refresh/create POT and PO files as needed
foreach my $page (keys %pagesources) {
my $pageneedsbuild = grep { $_ eq $pagesources{$page} } @$needsbuild;
if (istranslatable($page)) {
refreshpot(srcfile($file));
my @pofiles;
foreach my $lang (keys %{$translations{$page}}) {
push @pofiles, $pagesources{$translations{$page}{$lang}};
my $file=srcfile($pagesources{$page});
if ($pageneedsbuild || ! -e potfile($file)) {
refreshpot($file);
}
refreshpofiles(srcfile($file), map { srcfile($_) } @pofiles);
my @pofiles;
foreach my $lang (keys %{$config{po_slave_languages}}) {
my $pofile=pofile($file, $lang);
if ($pageneedsbuild || ! -e $pofile) {
push @pofiles, $pofile;
}
}
refreshpofiles($file, @pofiles) if (@pofiles);
}
}

View File

@ -197,11 +197,11 @@ Committing changes to a "master" page:
achieved by making any "slave" page dependent on the corresponding
"master" page, in the `needsbuild` hook.
**FIXME** Also, when the plugin has just been enabled, or when a page
Also, when the plugin has just been enabled, or when a page
has just been declared as being translatable:
- all the needed POT and PO files have to be created
- the PO files must be checked into version control
- all the needed POT and PO files are be created
- **FIXME** the PO files must be checked into version control
**FIXME** `refreshpofiles` uses `system()`, whose args have to be
checked more thoroughly to prevent any security issue (command