summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2008-10-13 22:07:21 +0200
committerintrigeri <intrigeri@boum.org>2008-10-18 15:49:10 +0200
commita28559798ad8c60e79fe80f109dd8e63204cd208 (patch)
tree35433af392d3bf1c0221b6ccf5dec962106033be
parent32cc0b336ae830831787b2024b855ed7db0a1589 (diff)
po plugin: created OTHERLANGUAGES template loop
It currently only provides basic translations/master pages links. Updated documentation accordingly. Signed-off-by: intrigeri <intrigeri@boum.org>
-rw-r--r--IkiWiki/Plugin/po.pm44
-rw-r--r--doc/plugins/po.mdwn38
2 files changed, 76 insertions, 6 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 0c95f6c14..88985cd12 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -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};
diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn
index 28b69e04b..d8cde9cb8 100644
--- a/doc/plugins/po.mdwn
+++ b/doc/plugins/po.mdwn
@@ -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
-------------------------