]> sipb.mit.edu Git - ikiwiki.git/commitdiff
po plugin: created OTHERLANGUAGES template loop
authorintrigeri <intrigeri@boum.org>
Mon, 13 Oct 2008 20:07:21 +0000 (22:07 +0200)
committerintrigeri <intrigeri@boum.org>
Sat, 18 Oct 2008 13:49:10 +0000 (15:49 +0200)
It currently only provides basic translations/master pages links.
Updated documentation accordingly.

Signed-off-by: intrigeri <intrigeri@boum.org>
IkiWiki/Plugin/po.pm
doc/plugins/po.mdwn

index 0c95f6c14ed2ae7b8d2c7768303ba816d73ac742..88985cd1208fb77a75657f91f35b3ae31345a9a1 100644 (file)
@@ -25,6 +25,7 @@ sub import {
        hook(type => "tweakbestlink", id => "po", call => \&tweakbestlink);
        hook(type => "filter", id => "po", call => \&filter);
        hook(type => "htmlize", id => "po", call => \&htmlize);
+       hook(type => "pagetemplate", id => "po", call => \&pagetemplate);
 }
 
 sub getsetup () { #{{{
@@ -198,6 +199,49 @@ sub htmlize (@) { #{{{
        return IkiWiki::htmlize($page, $page, pagetype($masterfile), $content);
 } #}}}
 
+sub otherlanguages ($) { #{{{
+       my $page=shift;
+       my @ret;
+       if (istranslatable($page)) {
+               foreach my $lang (sort keys %{$translations{$page}}) {
+                       push @ret, {
+                               url => urlto($translations{$page}{$lang}, $page),
+                               code => $lang,
+                               language => $config{po_slave_languages}{$lang},
+                               master => 0,
+                       };
+               }
+       }
+       elsif (istranslation($page)) {
+               my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+               push @ret, {
+                       url => urlto($masterpage, $page),
+                       code => $config{po_master_language}{code},
+                       language => $config{po_master_language}{name},
+                       master => 1,
+               };
+               foreach my $lang (sort keys %{$translations{$masterpage}}) {
+                       push @ret, {
+                               url => urlto($translations{$masterpage}{$lang}, $page),
+                               code => $lang,
+                               language => $config{po_slave_languages}{$lang},
+                               master => 0,
+                       } unless ($lang eq $curlang);
+               }
+       }
+       return @ret;
+} #}}}
+
+sub pagetemplate (@) { #{{{
+       my %params=@_;
+        my $page=$params{page};
+        my $template=$params{template};
+
+       if ($template->query(name => "otherlanguages")) {
+               $template->param(otherlanguages => [otherlanguages($page)]);
+       }
+} # }}}
+
 sub istranslatable ($) { #{{{
        my $page=shift;
        my $file=$pagesources{$page};
index 28b69e04bcb657ae675669e03512672c96b86193..d8cde9cb81b45565ce19c54bd8af0f87d91dc83a 100644 (file)
@@ -93,6 +93,29 @@ page's language, *i.e.*:
 - `foo/page.LL.html` if `usedirs` is disabled
 
 
+Templates
+---------
+
+The `OTHERLANGUAGES` loop provides ways to display the existing
+translations and/or master page. One typically adds the following code
+to `templates/page.tmpl`:
+
+       <TMPL_IF NAME="OTHERLANGUAGES">
+       <div id="otherlanguages">
+         <ul>
+         <TMPL_LOOP NAME="OTHERLANGUAGES">
+           <li>
+             <a href="<TMPL_VAR NAME="URL">"
+                class="is_master_<TMPL_VAR NAME="MASTER">">
+             <TMPL_VAR NAME="LANGUAGE">
+           </a>
+           </li>
+         </TMPL_LOOP>
+         </ul>
+       </div>
+       </TMPL_IF>
+
+
 Server support
 ==============
 
@@ -123,12 +146,11 @@ lighttpd unfortunately does not support content negotiation.
 TODO
 ====
 
-Display available translations
-------------------------------
+Link relationships
+------------------
 
-The [[linguas|plugins/contrib/linguas]] plugin has some code that can
-be used as a basis to display the existing translations, and allow to
-navigate between them.
+Should pages using the `OTHERLANGUAGES` template loop be declared as
+linking to the same page in other versions?
 
 View translation status
 -----------------------
@@ -138,10 +160,14 @@ completeness, either for a given page or for the whole wiki.
 
 This should not be too hard using gettext tools. If this is
 implemented as a
-[[HTML::Template|http://search.cpan.org/search?mode=dist&query=HTML%3A%3ATemplate]]
+[HTML::Template](http://search.cpan.org/search?mode=dist&query=HTML%3A%3ATemplate)
 loop, a page using it should depend on any "master" and "slave" pages
 whose status is being displayed.
 
+If it's not too heavy to compute, this status data may be made
+available in the `OTHERLANGUAGES` template loop; else, a dedicated
+loop would be needed.
+
 Automatic PO files update
 -------------------------