X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/4f44534d72c9a9a947bc38a3cb4987705c25bea5..d98296d1db02febfa7cc4fbe7f304ca2a9858fef:/IkiWiki/Plugin/po.pm diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index ac4401e48..0af47aad5 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -28,7 +28,7 @@ use UNIVERSAL; my %translations; my @origneedsbuild; my %origsubs; -my @slavelanguages; # orderer as in config po_slave_languages +my @slavelanguages; # languages codes ordered as in config po_slave_languages memoize("istranslatable"); memoize("_istranslation"); @@ -106,10 +106,10 @@ sub getsetup () { po_slave_languages => { type => "string", example => [ - 'fr' => 'Français', - 'es' => 'Español', - 'de' => 'Deutsch' - ], + 'fr|Français', + 'es|Español', + 'de|Deutsch' + ], description => "slave languages (PO files)", safe => 1, rebuild => 1, @@ -141,9 +141,15 @@ sub checkconfig () { if (ref $config{po_slave_languages} eq 'ARRAY') { my %slaves; - for (my $i=0; $i<@{$config{po_slave_languages}}; $i = $i + 2) { - $slaves{$config{po_slave_languages}->[$i]} = $config{po_slave_languages}->[$i + 1]; - push @slavelanguages, $config{po_slave_languages}->[$i]; + foreach my $pair (@{$config{po_slave_languages}}) { + my ($code, $name) = ( $pair =~ /^([a-z]{2})\|(.+)$/ ); + if (!defined $code || !defined $name) { + error(sprintf(gettext("%s has invalid syntax: must use CODE|NAME"), + $pair)); + } + $slaves{$code} = $name; + push @slavelanguages, $code; + } $config{po_slave_languages} = \%slaves; } @@ -158,7 +164,7 @@ sub checkconfig () { map { islanguagecode($_) or error(sprintf(gettext("%s is not a valid language code"), $_)); - } ($config{po_master_language}{code}, keys %{$config{po_slave_languages}}); + } ($config{po_master_language}{code}, @slavelanguages); if (! exists $config{po_translatable_pages} || ! defined $config{po_translatable_pages}) { @@ -187,7 +193,7 @@ sub checkconfig () { next if $underlay=~/^locale\//; # Underlays containing the po files for slave languages. - foreach my $ll (keys %{$config{po_slave_languages}}) { + foreach my $ll (@slavelanguages) { add_underlay("po/$ll/$underlay") if -d "$config{underlaydirbase}/po/$ll/$underlay"; } @@ -259,14 +265,6 @@ sub filter (@) { my $page = $params{page}; my $destpage = $params{destpage}; my $content = $params{content}; - - my @caller = caller(4); - # FIXME: need to whitelist inline as well? - unless ($caller[3] eq "IkiWiki::render" || - $caller[3] eq 'IkiWiki::Plugin::sidebar::sidebar_content') { - return $content; - } - if (istranslation($page) && ! alreadyfiltered($page, $destpage)) { $content = po_to_markup($page, $content); setalreadyfiltered($page, $destpage); @@ -617,7 +615,7 @@ sub mybeautify_urlpath ($) { $res =~ s!/\Qindex.$config{htmlext}\E$!/!; map { $res =~ s!/\Qindex.$_.$config{htmlext}\E$!/!; - } (keys %{$config{po_slave_languages}}); + } @slavelanguages; } return $res; } @@ -867,7 +865,7 @@ sub otherlanguages_pages ($) { my %ret; map { $ret{$_} = otherlanguage_page($page, $_) - } otherlanguages_codes($page); + } @{otherlanguages_codes($page)}; return \%ret; } @@ -892,7 +890,7 @@ sub pofile ($$) { sub pofiles ($) { my $masterfile=shift; - return map pofile($masterfile, $_), (keys %{$config{po_slave_languages}}); + return map pofile($masterfile, $_), @slavelanguages; } sub refreshpot ($) { @@ -1050,7 +1048,7 @@ sub ishomepage ($) { my $page = shift; return 1 if $page eq 'index'; - map { return 1 if $page eq 'index.'.$_ } keys %{$config{po_slave_languages}}; + map { return 1 if $page eq 'index.'.$_ } @slavelanguages; return undef; } @@ -1065,7 +1063,7 @@ sub deletetranslations ($) { if (-e $absfile && ! -l $absfile && ! -d $absfile) { push @todelete, $file; } - } keys %{$config{po_slave_languages}}; + } @slavelanguages; map { if ($config{rcs}) { @@ -1293,4 +1291,32 @@ sub match_currentlang ($$;@) { } } +sub match_needstranslation ($$;@) { + my $page=shift; + my $wanted=shift; + + if (defined $wanted && $wanted ne "") { + if ($wanted !~ /^\d+$/) { + return IkiWiki::FailReason->new("parameter is not an integer"); + } + elsif ($wanted > 100) { + return IkiWiki::FailReason->new("parameter is greater than 100"); + } + } + else { + $wanted=100; + } + + my $percenttranslated=IkiWiki::Plugin::po::percenttranslated($page); + if ($percenttranslated eq 'N/A') { + return IkiWiki::FailReason->new("file is not a translatable page"); + } + elsif ($percenttranslated < $wanted) { + return IkiWiki::SuccessReason->new("file has $percenttranslated translated"); + } + else { + return IkiWiki::FailReason->new("file is translated enough"); + } +} + 1