X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/daa04ae43612f2c48c6ec3e1c5dfa0ee6fda6653..f652af11fd591bb3905d25a6653a0aca25d85e4a:/IkiWiki/Plugin/po.pm?ds=sidebyside diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 7902fa745..89bd99470 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -17,6 +17,7 @@ use File::Copy; use File::Spec; use File::Temp; use Memoize; +use UNIVERSAL; my %translations; my @origneedsbuild; @@ -36,6 +37,7 @@ sub import { #{{{ 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); @@ -153,6 +155,11 @@ sub pofile ($$) { #{{{ 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; @@ -213,6 +220,41 @@ sub needsbuild () { #{{{ } } #}}} +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; @@ -263,6 +305,7 @@ sub myurlto ($$;$) { #{{{ 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)