]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Merge commit 'upstream/po' into prv/po
authorintrigeri <intrigeri@boum.org>
Thu, 6 Nov 2008 11:28:31 +0000 (12:28 +0100)
committerintrigeri <intrigeri@boum.org>
Thu, 6 Nov 2008 11:28:31 +0000 (12:28 +0100)
Conflicts:

IkiWiki/Plugin/po.pm
doc/plugins/po.mdwn

Signed-off-by: intrigeri <intrigeri@boum.org>
1  2 
IkiWiki/Plugin/po.pm
doc/plugins/po.mdwn

index 38fc7527bcd668e765baa002e1a3f6bbef53d219,ac56041cfbe00f00e0c371ba3cd8b41cb3ed1637..7861523dad8076122515dd688a3aac307692c288
@@@ -38,12 -34,15 +35,16 @@@ sub import { #{{
        hook(type => "needsbuild", id => "po", call => \&needsbuild);
        hook(type => "filter", id => "po", call => \&filter);
        hook(type => "htmlize", id => "po", call => \&htmlize);
 -      hook(type => "pagetemplate", id => "po", call => \&pagetemplate);
 +      hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
 +      hook(type => "editcontent", id => "po", call => \&editcontent);
+       $origsubs{'bestlink'}=\&IkiWiki::bestlink;
        inject(name => "IkiWiki::bestlink", call => \&mybestlink);
+       $origsubs{'beautify_urlpath'}=\&IkiWiki::beautify_urlpath;
        inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath);
+       $origsubs{'targetpage'}=\&IkiWiki::targetpage;
        inject(name => "IkiWiki::targetpage", call => \&mytargetpage);
- }
+ } #}}}
  
  sub getsetup () { #{{{
        return
@@@ -111,17 -110,17 +112,19 @@@ sub checkconfig () { #{{
  
  sub potfile ($) { #{{{
        my $masterfile=shift;
        (my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/);
 -      return File::Spec->catfile($dir, $name . ".pot");
 +      $dir='' if $dir eq './';
 +      return File::Spec->catpath('', $dir, $name . ".pot");
  } #}}}
  
  sub pofile ($$) { #{{{
        my $masterfile=shift;
        my $lang=shift;
        (my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/);
 -      return File::Spec->catfile($dir, $name . "." . $lang . ".po");
 +      $dir='' if $dir eq './';
 +      return File::Spec->catpath('', $dir, $name . "." . $lang . ".po");
  } #}}}
  
  sub refreshpot ($) { #{{{
@@@ -288,49 -286,30 +293,50 @@@ sub mybestlink ($$) { #{{
        return "";
  } #}}}
  
 -# We use filter to convert PO to the master page's type,
 -# since other plugins should not work on PO files
 +# We use filter to convert PO to the master page's format,
 +# since the rest of ikiwiki should not work on PO files.
  sub filter (@) { #{{{
        my %params = @_;
        my $page = $params{page};
        my $destpage = $params{destpage};
        my $content = decode_utf8(encode_utf8($params{content}));
  
 -      # decide if this is a PO file that should be converted into a
 -      # translated document, and perform various sanity checks
 -      if (! istranslation($page) || $filtered{$page}{$destpage}) {
 -              return $content;
 -      }
 +      return $content if ( ! istranslation($page)
 +                           || ( exists $filtered{$page}{$destpage}
 +                                && $filtered{$page}{$destpage} eq 1 ));
 +
 +      # CRLF line terminators make poor Locale::Po4a feel bad
 +      $content=~s/\r\n/\n/g;
 +
 +      # Implementation notes
 +      #
 +      # 1. Locale::Po4a reads/writes from/to files, and I'm too lazy
 +      #    to learn how to disguise a variable as a file.
 +      # 2. There are incompatibilities between some File::Temp versions
 +      #    (including 0.18, bundled with Lenny's perl-modules package)
 +      #    and others (e.g. 0.20, previously present in the archive as
 +      #    a standalone package): under certain circumstances, some
 +      #    return a relative filename, whereas others return an absolute one;
 +      #    we here use this module in a way that is at least compatible
 +      #    with 0.18 and 0.20. Beware, hit'n'run refactorers!
 +      my $infile = new File::Temp(TEMPLATE => "ikiwiki-po-filter-in.XXXXXXXXXX",
 +                                  DIR => File::Spec->tmpdir,
 +                                  UNLINK => 1)->filename;
 +      my $outfile = new File::Temp(TEMPLATE => "ikiwiki-po-filter-out.XXXXXXXXXX",
 +                                   DIR => File::Spec->tmpdir,
 +                                   UNLINK => 1)->filename;
 +
 +      writefile(basename($infile), File::Spec->tmpdir, $content);
  
        my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/);
 -      my $file=srcfile(exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page});
        my $masterfile = srcfile($pagesources{$masterpage});
        my (@pos,@masters);
 -      push @pos,$file;
 +      push @pos,$infile;
        push @masters,$masterfile;
        my %options = (
-                       "markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0,
-                       );
+               "markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0,
+       );
        my $doc=Locale::Po4a::Chooser::new('text',%options);
        $doc->process(
                'po_in_name'    => \@pos,
@@@ -420,10 -399,10 +429,11 @@@ sub otherlanguages ($) { #{{
  
  sub pagetemplate (@) { #{{{
        my %params=@_;
 -        my $page=$params{page};
 +      my $page=$params{page};
 +      my $destpage=$params{destpage};
 +      my $template=$params{template};
 -        my $destpage=$params{destpage};
 -        my $template=$params{template};
 +      my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/) if istranslation($page);
  
        if (istranslation($page) && $template->query(name => "percenttranslated")) {
                $template->param(percenttranslated => percenttranslated($page));
                                                        linktext => gettext("Discussion"),
                                                        ));
        }
 +      # remove broken parentlink to ./index.html on home page's translations
 +      if ($template->param('parentlinks')
 +          && istranslation($page)
 +          && $masterpage eq "index") {
 +              $template->param('parentlinks' => []);
 +      }
  } # }}}
  
 +sub editcontent () { #{{{
 +      my %params=@_;
 +      # as we're previewing or saving a page, the content may have
 +      # changed, so tell the next filter() invocation it must not be lazy
 +      if (exists $filtered{$params{page}}{$params{page}}) {
 +              delete $filtered{$params{page}}{$params{page}};
 +      }
 +      return $params{content};
 +} #}}}
 +
  sub istranslatable ($) { #{{{
        my $page=shift;
        my $file=$pagesources{$page};
  
        if (! defined $file
index f9cd0ff034b139cf21dd26751d01bc4006aa9834,a2e7b18e3b81aad9e0361101da2fe7a6cfe0307c..0a8a77a3ce429ae2e23fd7dd925cf87771ac6a91
@@@ -185,12 -184,9 +184,9 @@@ Automatic PO file updat
  
  Committing changes to a "master" page:
  
- 1. updates the POT file, as well as the PO files for the "slave"
-    languages (this is done in the `needsbuild` hook); the updated PO
-    files are then put under version control;
- 2. triggers a refresh of the corresponding HTML slave pages (this is
-    achieved by making any "slave" page dependent on the corresponding
-    "master" page, in the `needsbuild` hook).
 -1. updates the POT file and the PO files for the supported languages;
 -   the updated PO files are then put under version control
 -2. triggers a refresh of the corresponding HTML slave pages
++1. updates the POT file and the PO files for the "slave" languages;
++   the updated PO files are then put under version control;
++2. triggers a refresh of the corresponding HTML slave pages.
  
  Also, when the plugin has just been enabled, or when a page has just
  been declared as being translatable, the needed POT and PO files are
@@@ -207,11 -202,11 +203,11 @@@ discussion page
  Translating
  -----------
  
 -One can edit the PO files using ikiwiki's CGI (a message-by-message interface
 -could also be implemented at some point).
 +One can edit the PO files using ikiwiki's CGI (a message-by-message
 +interface could also be implemented at some point).
  
- If [[tips/untrusted_git_push]] is setup, one can edit the PO files in
her preferred `$EDITOR`, without needing to be online.
+ If [[tips/untrusted_git_push]] is setup, one can edit the PO files in one's
+ preferred `$EDITOR`, without needing to be online.
  
  TODO
  ====
@@@ -253,15 -277,32 +259,28 @@@ be fixed by something like [[todo/using
  
  Which configuration settings are safe enough for websetup?
  
 -### parentlinks
 -
 -When the wiki home page is translatable, the parentlinks plugin sets
 -`./index.html` as its translations' single parent link. Ideally, the home page's
 -translations should get no parent link at all, just like the version written in
 -the master language.
 -
+ > I see no problems with `po_master_language` and `po_slave_languages`
+ > (assuming websetup handles the hashes correctly). Would not hurt to check
+ > that the values of these are legal language codes, in `checkconfig`. 
+ > `po_translatable_pages` seems entirely safe. `po_link_to` w/o usedirs
+ > causes ikiwiki to error out. If it were changed to fall back to a safe
+ > setting in this case rather than error, it would be safe.
+ > --[[Joey]]
  ### backlinks
  
 -If a given translatable `sourcepage.mdwn` links to \[[destpage]],
 -`sourcepage.LL.po` also link to \[[destpage]], and the latter has the master
 -page *and* all its translations listed in the backlinks.
 +`po_link_to = negotiated`: if a given translatable `sourcepage.mdwn`
 +links to \[[destpage]], `sourcepage.LL.po` also link to \[[destpage]],
 +and the latter has the master page *and* all its translations listed
 +in the backlinks.
 +
 +`po_link_to = current`: seems to work nicely
  
+ ### license
+ > Could you please put a copyright and license on po.pm? I assume it's
+ > GPLed as it's based on po4a-translate. --[[Joey]]
  Translation quality assurance
  -----------------------------