summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/po.pm31
-rw-r--r--doc/plugins/po.mdwn23
2 files changed, 43 insertions, 11 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index aa592989b..eee6d4058 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -237,7 +237,6 @@ sub filter (@) { #{{{
'file_in_charset' => 'utf-8',
'file_out_charset' => 'utf-8',
) or error("[po/filter:$file]: failed to translate");
- my ($percent,$hit,$queries) = $doc->stats();
my $tmpfh = File::Temp->new(TEMPLATE => "/tmp/ikiwiki-po-filter-out.XXXXXXXXXX");
my $tmpout = $tmpfh->filename;
$doc->write($tmpout) or error("[po/filter:$file] could not write $tmpout");
@@ -257,16 +256,40 @@ sub htmlize (@) { #{{{
return IkiWiki::htmlize($page, $page, pagetype($masterfile), $content);
} #}}}
+sub percenttranslated ($) { #{{{
+ my $page=shift;
+ return "N/A" unless (istranslation($page));
+ my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+ my $file=srcfile($pagesources{$page});
+ my $masterfile = srcfile($pagesources{$masterpage});
+ my (@pos,@masters);
+ push @pos,$file;
+ push @masters,$masterfile;
+ my %options = (
+ "markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0,
+ );
+ my $doc=Locale::Po4a::Chooser::new('text',%options);
+ $doc->process(
+ 'po_in_name' => \@pos,
+ 'file_in_name' => \@masters,
+ 'file_in_charset' => 'utf-8',
+ 'file_out_charset' => 'utf-8',
+ ) or error("[po/percenttranslated:$file]: failed to translate");
+ my ($percent,$hit,$queries) = $doc->stats();
+ return $percent;
+} #}}}
+
sub otherlanguages ($) { #{{{
my $page=shift;
my @ret;
if (istranslatable($page)) {
foreach my $lang (sort keys %{$translations{$page}}) {
+ my $translation = $translations{$page}{$lang};
push @ret, {
- url => urlto($translations{$page}{$lang}, $page),
+ url => urlto($translation, $page),
code => $lang,
language => $config{po_slave_languages}{$lang},
- master => 0,
+ percent => percenttranslated($translation),
};
}
}
@@ -283,7 +306,7 @@ sub otherlanguages ($) { #{{{
url => urlto($translations{$masterpage}{$lang}, $page),
code => $lang,
language => $config{po_slave_languages}{$lang},
- master => 0,
+ percent => percenttranslated($page),
} unless ($lang eq $curlang);
}
}
diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn
index 64d22d34c..ab37ae419 100644
--- a/doc/plugins/po.mdwn
+++ b/doc/plugins/po.mdwn
@@ -126,25 +126,34 @@ Usage
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`:
+The `OTHERLANGUAGES` loop provides ways to display other languages'
+versions of the same page, and the translations' status.
+
+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>
+ <a href="<TMPL_VAR NAME="URL">"><TMPL_VAR NAME="LANGUAGE"></a>
+ <TMPL_UNLESS NAME="MASTER">
+ (<TMPL_VAR NAME="PERCENT">&nbsp;%)
+ </TMPL_UNLESS>
</li>
</TMPL_LOOP>
</ul>
</div>
</TMPL_IF>
+The following variables are available inside the loop (for every page in):
+
+- `URL` - url to the page
+- `CODE` - two-letters language code
+- `LANGUAGE` - language name (as defined in `po_slave_languages`)
+- `MASTER` - is true (1) if, and only if the page is a "master" page
+- `PERCENT` - for "slave" pages, is set to the translation completeness, in percents
+
Additional PageSpec tests
-------------------------