X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/eca2dbe67f7c2ce9f5a53765ea73227fdad0ad28..e03155172756f5c54c180136a5982e543cacb534:/IkiWiki/Plugin/po.pm diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index cf801c827..1bf0b72e3 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -10,7 +10,12 @@ use warnings; use strict; use IkiWiki 3.00; use Encode; -use Locale::Po4a::Common qw(nowrapi18n !/.*/); +eval q{use Locale::Po4a::Common qw(nowrapi18n !/.*/)}; +if ($@) { + print STDERR gettext("warning: Old po4a detected! Recommend upgrade to 0.35.")."\n"; + eval q{use Locale::Po4a::Common qw(!/.*/)}; + die $@ if $@; +} use Locale::Po4a::Chooser; use Locale::Po4a::Po; use File::Basename; @@ -94,7 +99,7 @@ sub getsetup () { type => "string", example => { 'fr' => 'Français', - 'es' => 'Castellano', + 'es' => 'Español', 'de' => 'Deutsch' }, description => "slave languages (PO files)", @@ -152,17 +157,15 @@ sub checkconfig () { push @{$config{wiki_file_prune_regexps}}, qr/\.pot$/; # Translated versions of the underlays are added if available. - foreach my $underlay ("basewiki", map { m/^\Q$config{underlaydirbase}\E\/*(.*)/ } reverse @{$config{underlaydirs}}) { + foreach my $underlay ("basewiki", + map { m/^\Q$config{underlaydirbase}\E\/*(.*)/ } + reverse @{$config{underlaydirs}}) { next if $underlay=~/^locale\//; - # Add underlay containing the pot files. - #add_underlay("locale/pot/$underlay") - # if -d "$config{underlaydirbase}/locale/pot/$underlay"; - - # Add underlays containing the po files for slave languages. + # Underlays containing the po files for slave languages. foreach my $ll (keys %{$config{po_slave_languages}}) { - add_underlay("locale/mo/$underlay") - if -d "$config{underlaydirbase}/locale/mo/$underlay"; + add_underlay("po/$ll/$underlay") + if -d "$config{underlaydirbase}/po/$ll/$underlay"; } if ($config{po_master_language}{code} ne 'en') { @@ -281,17 +284,16 @@ sub pagetemplate (@) { map add_depends($page, $_), (values %{otherlanguages($page)}); } if ($config{discussion} && istranslation($page)) { - my $discussionlink=gettext("discussion"); - if ($page !~ /.*\/\Q$discussionlink\E$/i && + if ($page !~ /.*\/\Q$config{discussionpage}\E$/i && (length $config{cgiurl} || - exists $links{$masterpage."/".$discussionlink})) { + exists $links{$masterpage."/".lc($config{discussionpage})})) { $template->param('discussionlink' => htmllink( $page, $destpage, - $masterpage . '/' . gettext("Discussion"), + $masterpage . '/' . $config{discussionpage}, noimageinline => 1, forcesubpage => 0, - linktext => gettext("Discussion"), + linktext => $config{discussionpage}, )); } } @@ -378,11 +380,11 @@ sub change (@) { && exists $config{meta_overrides_page_title} && defined $config{meta_overrides_page_title} && $config{meta_overrides_page_title}) { - debug(sprintf(gettext("re-rendering all pages to fix meta titles"))); + debug(sprintf(gettext("rebuilding all pages to fix meta titles"))); resetalreadyfiltered(); require IkiWiki::Render; foreach my $file (@rendered) { - debug(sprintf(gettext("rendering %s"), $file)); + debug(sprintf(gettext("building %s"), $file)); IkiWiki::render($file); } } @@ -443,8 +445,8 @@ sub canremove (@) { my %params = @_; if (istranslation($params{page})) { - return gettext("Can not remove a translation. Removing the master page, ". - "though, removes its translations as well."); + return gettext("Can not remove a translation. If the master page is removed, ". + "however, its translations will be removed as well."); } return undef; } @@ -463,8 +465,8 @@ sub canrename (@) { # saved early in the renaming process. my $orig_torename = $session->param("po_orig_torename"); unless (grep { $_ eq $masterpage } @{$orig_torename}) { - return gettext("Can not rename a translation. Renaming the master page, ". - "though, renames its translations as well."); + return gettext("Can not rename a translation. If the master page is renamed, ". + "however, its translations will be renamed as well."); } } return undef; @@ -829,8 +831,23 @@ sub refreshpofiles ($@) { foreach my $pofile (@pofiles) { IkiWiki::prep_writefile(basename($pofile),dirname($pofile)); + + if (! -e $pofile) { + # If the po file exists in an underlay, copy it + # from there. + my ($pobase)=$pofile=~/^\Q$config{srcdir}\E\/?(.*)$/; + foreach my $dir (@{$config{underlaydirs}}) { + if (-e "$dir/$pobase") { + File::Copy::syscopy("$dir/$pobase",$pofile) + or error("po(refreshpofiles) ". + sprintf(gettext("failed to copy underlay PO file to %s"), + $pofile)); + } + } + } + if (-e $pofile) { - system("msgmerge", "-q", "-U", "--backup=none", $pofile, $potfile) == 0 + system("msgmerge", "--previous", "-q", "-U", "--backup=none", $pofile, $potfile) == 0 or error("po(refreshpofiles) ". sprintf(gettext("failed to update %s"), $pofile)); @@ -1092,8 +1109,8 @@ sub isvalidpo ($) { if ($res) { return IkiWiki::SuccessReason->new("valid gettext data"); } - return IkiWiki::FailReason->new("invalid gettext data, go back ". - "to previous page to go on with edit"); + return IkiWiki::FailReason->new(gettext("invalid gettext data, go back ". + "to previous page to continue edit")); } # ,----