use File::Spec;
use File::Temp;
use Memoize;
+use UNIVERSAL;
my %translations;
my @origneedsbuild;
hook(type => "getsetup", id => "po", call => \&getsetup);
hook(type => "checkconfig", id => "po", call => \&checkconfig);
hook(type => "needsbuild", id => "po", call => \&needsbuild);
+ hook(type => "scan", id => "po", call => \&scan, last =>1);
hook(type => "filter", id => "po", call => \&filter);
hook(type => "htmlize", id => "po", call => \&htmlize);
hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
return File::Spec->catpath('', $dir, $name . "." . $lang . ".po");
} #}}}
+sub pofiles ($) { #{{{
+ my $masterfile=shift;
+ return map pofile($masterfile, $_), (keys %{$config{po_slave_languages}});
+} #}}}
+
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);
$doc->{TT}{utf_mode} = 1;
$doc->{TT}{file_in_charset} = 'utf-8';
$doc->{TT}{file_out_charset} = 'utf-8';
+ $doc->read($masterfile);
# let's cheat a bit to force porefs option to be passed to Locale::Po4a::Po;
# this is undocument use of internal Locale::Po4a::TransTractor's data,
# compulsory since this module prevents us from using the porefs option.
}
} #}}}
+sub scan (@) { #{{{
+ my %params=@_;
+ my $page=$params{page};
+ my $content=$params{content};
+
+ return unless UNIVERSAL::can("IkiWiki::Plugin::link", "import");
+
+ if (istranslation($page)) {
+ my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+ foreach my $destpage (@{$links{$page}}) {
+ if (istranslatable($destpage)) {
+ # replace one occurence of $destpage in $links{$page}
+ # (we only want to replace the one that was added by
+ # IkiWiki::Plugin::link::scan, other occurences may be
+ # there for other reasons)
+ for (my $i=0; $i<@{$links{$page}}; $i++) {
+ if (@{$links{$page}}[$i] eq $destpage) {
+ @{$links{$page}}[$i] = $destpage . '.' . $curlang;
+ last;
+ }
+ }
+ }
+ }
+ }
+ elsif (! istranslatable($page) && ! istranslation($page)) {
+ foreach my $destpage (@{$links{$page}}) {
+ if (istranslatable($destpage)) {
+ map {
+ push @{$links{$page}}, $destpage . '.' . $_;
+ } (keys %{$config{po_slave_languages}});
+ }
+ }
+ }
+} #}}}
+
sub mytargetpage ($$) { #{{{
my $page=shift;
my $ext=shift;
my $from=shift;
my $absolute=shift;
+ # workaround hard-coded /index.$config{htmlext} in IkiWiki::urlto()
if (! length $to
&& $config{po_link_to} eq "current"
&& istranslation($from)