diff options
-rw-r--r-- | IkiWiki/Plugin/po.pm | 31 | ||||
-rw-r--r-- | doc/plugins/po.mdwn | 23 |
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"> %) + </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 ------------------------- |