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>
master
intrigeri 2008-10-13 22:07:21 +02:00
parent 32cc0b336a
commit a28559798a
2 changed files with 76 additions and 6 deletions

View 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};

View 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
-------------------------