use Encode;
use Locale::Po4a::Chooser;
use File::Temp;
+use Memoize;
+
+my %translations;
+memoize("istranslatable");
+memoize("_istranslation");
sub import {
hook(type => "getsetup", id => "po", call => \&getsetup);
},
po_slave_languages => {
type => "string",
- example => {'fr' => { 'name' => 'Français' },
- 'es' => { 'name' => 'Castellano' },
- 'de' => { 'name' => 'Deutsch' },
+ example => {
+ 'fr' => 'Français',
+ 'es' => 'Castellano',
+ 'de' => 'Deutsch'
},
description => "slave languages (PO files)",
safe => 1,
sub scan (@) { #{{{
my %params=@_;
my $page=$params{page};
-
- # FIXME: cache (or memoize) the list of translatable/translation pages,
- # and/or istranslation/istranslated results
+ # let's build %translations, using istranslation's
+ # side-effect, so that we can consider it is complete at
+ # preprocess time
+ istranslation($page);
} #}}}
sub targetpage (@) { #{{{
return pagespec_match($page, $config{po_translatable_pages});
} #}}}
-sub istranslation ($) { #{{{
+sub _istranslation ($) { #{{{
my $page=shift;
my $file=$pagesources{$page};
if (! defined $file) {
return istranslatable($masterpage);
} #}}}
+sub istranslation ($) { #{{{
+ my $page=shift;
+ if (_istranslation($page)) {
+ my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+ $translations{$masterpage}{$lang}=$page unless exists $translations{$masterpage}{$lang};
+ return 1;
+ }
+ return 0;
+} #}}}
package IkiWiki::PageSpec;
use warnings;