]> sipb.mit.edu Git - ikiwiki.git/commitdiff
po: abstract "doing something for the same page in every other language"
authorintrigeri <intrigeri@boum.org>
Mon, 10 Nov 2008 13:49:58 +0000 (14:49 +0100)
committerintrigeri <intrigeri@boum.org>
Mon, 10 Nov 2008 13:55:21 +0000 (14:55 +0100)
Signed-off-by: intrigeri <intrigeri@boum.org>
IkiWiki/Plugin/po.pm

index a37230b887dde1cf76e52fa91f1f9881536f5e58..e7f36e968361c21e9679a80ad5d112258c8e3e1f 100644 (file)
@@ -138,6 +138,24 @@ sub checkconfig () { #{{{
        push @{$config{wiki_file_prune_regexps}}, qr/\.pot$/;
 } #}}}
 
+sub otherlanguages($) { #{{{
+       my $page=shift;
+
+       my %ret;
+       if (istranslatable($page)) {
+               %ret = %{$translations{$page}};
+       }
+       elsif (istranslation($page)) {
+               my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+               $ret{$config{po_master_language}{code}} = $masterpage;
+               foreach my $lang (sort keys %{$translations{$masterpage}}) {
+                       next if $lang eq $curlang;
+                       $ret{$lang} = $translations{$masterpage}{$lang};
+               }
+       }
+       return \%ret;
+} #}}}
+
 sub potfile ($) { #{{{
        my $masterfile=shift;
 
@@ -222,9 +240,7 @@ sub needsbuild () { #{{{
 
        # make existing translations depend on the corresponding master page
        foreach my $master (keys %translations) {
-               foreach my $slave (values %{$translations{$master}}) {
-                       add_depends($slave, $master);
-               }
+               map add_depends($_, $master), values %{otherlanguages($master)};
        }
 } #}}}
 
@@ -466,7 +482,7 @@ sub percenttranslated ($) { #{{{
        return $percent;
 } #}}}
 
-sub otherlanguages ($) { #{{{
+sub otherlanguagesloop ($) { #{{{
        my $page=shift;
 
        my @ret;
@@ -519,18 +535,8 @@ sub pagetemplate (@) { #{{{
                $template->param(istranslatable => istranslatable($page));
        }
        if ($template->query(name => "otherlanguages")) {
-               $template->param(otherlanguages => [otherlanguages($page)]);
-               if (istranslatable($page)) {
-                       foreach my $translation (values %{$translations{$page}}) {
-                               add_depends($page, $translation);
-                       }
-               }
-               elsif (istranslation($page)) {
-                       add_depends($page, $masterpage);
-                       foreach my $translation (values %{$translations{$masterpage}}) {
-                               add_depends($page, $translation) unless $page eq $translation;
-                       }
-               }
+               $template->param(otherlanguages => [otherlanguagesloop($page)]);
+               map add_depends($page, $_), (values %{otherlanguages($page)});
        }
        # Rely on IkiWiki::Render's genpage() to decide wether
        # a discussion link should appear on $page; this is not