]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/po.pm
po: added an optional target percentage to needstranslation
[ikiwiki.git] / IkiWiki / Plugin / po.pm
index 7d5dfee03f480fc039b66c54a34d5e1a1a7b111b..9cb047992e724d88eb6d68a339c3e06d435c14ec 100644 (file)
@@ -259,14 +259,6 @@ sub filter (@) {
        my $page = $params{page};
        my $destpage = $params{destpage};
        my $content = $params{content};
        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);
        if (istranslation($page) && ! alreadyfiltered($page, $destpage)) {
                $content = po_to_markup($page, $content);
                setalreadyfiltered($page, $destpage);
@@ -867,7 +859,7 @@ sub otherlanguages_pages ($) {
         my %ret;
        map {
                $ret{$_} = otherlanguage_page($page, $_)
         my %ret;
        map {
                $ret{$_} = otherlanguage_page($page, $_)
-       } otherlanguages_codes($page);
+       } @{otherlanguages_codes($page)};
 
        return \%ret;
 }
 
        return \%ret;
 }
@@ -902,15 +894,15 @@ sub refreshpot ($) {
        my $doc=Locale::Po4a::Chooser::new(po4a_type($masterfile),
                                           po4a_options($masterfile));
        $doc->{TT}{utf_mode} = 1;
        my $doc=Locale::Po4a::Chooser::new(po4a_type($masterfile),
                                           po4a_options($masterfile));
        $doc->{TT}{utf_mode} = 1;
-       $doc->{TT}{file_in_charset} = 'utf-8';
-       $doc->{TT}{file_out_charset} = 'utf-8';
+       $doc->{TT}{file_in_charset} = 'UTF-8';
+       $doc->{TT}{file_out_charset} = 'UTF-8';
        $doc->read($masterfile);
        # let's cheat a bit to force porefs option to be passed to
        # Locale::Po4a::Po; this is undocument use of internal
        # Locale::Po4a::TransTractor's data, compulsory since this module
        # prevents us from using the porefs option.
        $doc->{TT}{po_out}=Locale::Po4a::Po->new({ 'porefs' => 'none' });
        $doc->read($masterfile);
        # let's cheat a bit to force porefs option to be passed to
        # Locale::Po4a::Po; this is undocument use of internal
        # Locale::Po4a::TransTractor's data, compulsory since this module
        # prevents us from using the porefs option.
        $doc->{TT}{po_out}=Locale::Po4a::Po->new({ 'porefs' => 'none' });
-       $doc->{TT}{po_out}->set_charset('utf-8');
+       $doc->{TT}{po_out}->set_charset('UTF-8');
        # do the actual work
        $doc->parse;
        IkiWiki::prep_writefile(basename($potfile),dirname($potfile));
        # do the actual work
        $doc->parse;
        IkiWiki::prep_writefile(basename($potfile),dirname($potfile));
@@ -996,8 +988,8 @@ sub percenttranslated ($) {
        $doc->process(
                'po_in_name'    => [ $file ],
                'file_in_name'  => [ $masterfile ],
        $doc->process(
                'po_in_name'    => [ $file ],
                'file_in_name'  => [ $masterfile ],
-               'file_in_charset'  => 'utf-8',
-               'file_out_charset' => 'utf-8',
+               'file_in_charset'  => 'UTF-8',
+               'file_out_charset' => 'UTF-8',
        ) or error("po(percenttranslated) ".
                   sprintf(gettext("failed to translate %s"), $page));
        my ($percent,$hit,$queries) = $doc->stats();
        ) or error("po(percenttranslated) ".
                   sprintf(gettext("failed to translate %s"), $page));
        my ($percent,$hit,$queries) = $doc->stats();
@@ -1143,8 +1135,8 @@ sub po_to_markup ($$) {
        $doc->process(
                'po_in_name'    => [ $infile ],
                'file_in_name'  => [ $masterfile ],
        $doc->process(
                'po_in_name'    => [ $infile ],
                'file_in_name'  => [ $masterfile ],
-               'file_in_charset'  => 'utf-8',
-               'file_out_charset' => 'utf-8',
+               'file_in_charset'  => 'UTF-8',
+               'file_out_charset' => 'UTF-8',
        ) or return $fail->(gettext("failed to translate"));
        $doc->write($outfile)
                or return $fail->(sprintf(gettext("failed to write %s"), $outfile));
        ) or return $fail->(gettext("failed to translate"));
        $doc->write($outfile)
                or return $fail->(sprintf(gettext("failed to write %s"), $outfile));
@@ -1293,4 +1285,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
 1