my %translations;
my @origneedsbuild;
my %origsubs;
-my @slavelanguages; # orderer as in config po_slave_languages
memoize("istranslatable");
memoize("_istranslation");
},
po_slave_languages => {
type => "string",
- example => [
+ example => {
'fr' => 'Français',
'es' => 'Español',
'de' => 'Deutsch'
- ],
+ },
description => "slave languages (PO files)",
safe => 1,
rebuild => 1,
$field, 'po'));
}
}
-
- 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];
- }
- $config{po_slave_languages} = \%slaves;
- }
- elsif (ref $config{po_slave_languages} eq 'HASH') {
- @slavelanguages = sort {
- $config{po_slave_languages}->{$a} cmp $config{po_slave_languages}->{$b};
- } keys %{$config{po_slave_languages}};
- }
-
delete $config{po_slave_languages}{$config{po_master_language}{code}};;
map {
# make existing translations depend on the corresponding master page
foreach my $master (keys %translations) {
- map add_depends($_, $master), values %{otherlanguages_pages($master)};
+ map add_depends($_, $master), values %{otherlanguages($master)};
}
}
# make sure any destpage's translations has
# $page in its backlinks
push @{$links{$page}},
- values %{otherlanguages_pages($destpage)};
+ values %{otherlanguages($destpage)};
}
}
}
}
if ($template->query(name => "otherlanguages")) {
$template->param(otherlanguages => [otherlanguagesloop($page)]);
- map add_depends($page, $_), (values %{otherlanguages_pages($page)});
+ map add_depends($page, $_), (values %{otherlanguages($page)});
}
if ($config{discussion} && istranslation($page)) {
if ($page !~ /.*\/\Q$config{discussionpage}\E$/i &&
return () unless istranslatable($torename{src});
my @ret;
- my %otherpages=%{otherlanguages_pages($torename{src})};
+ my %otherpages=%{otherlanguages($torename{src})};
while (my ($lang, $otherpage) = each %otherpages) {
push @ret, {
src => $otherpage,
srcfile => $pagesources{$otherpage},
- dest => otherlanguage_page($torename{dest}, $lang),
+ dest => otherlanguage($torename{dest}, $lang),
destfile => $torename{dest}.".".$lang.".po",
required => 0,
};
return $code =~ /^[a-z]{2}$/;
}
-sub otherlanguage_page ($$) {
+sub otherlanguage ($$) {
my $page=shift;
my $code=shift;
return masterpage($page) . '.' . $code;
}
-# Returns the list of other languages codes: the master language comes first,
-# then the codes are ordered the same way as in po_slave_languages, if it is
-# an array, or in the language name lexical order, if it is a hash.
-sub otherlanguages_codes ($) {
+sub otherlanguages ($) {
my $page=shift;
- my @ret;
- return \@ret unless istranslation($page) || istranslatable($page);
+ my %ret;
+ return \%ret unless istranslation($page) || istranslatable($page);
my $curlang=lang($page);
foreach my $lang
- ($config{po_master_language}{code}, @slavelanguages) {
+ ($config{po_master_language}{code}, keys %{$config{po_slave_languages}}) {
next if $lang eq $curlang;
- push @ret, $lang;
+ $ret{$lang}=otherlanguage($page, $lang);
}
- return \@ret;
-}
-
-sub otherlanguages_pages ($) {
- my $page=shift;
-
- my %ret;
- map {
- $ret{$_} = otherlanguage_page($page, $_)
- } @{otherlanguages_codes($page)};
-
return \%ret;
}
my $page=shift;
my @ret;
- if (istranslation($page)) {
- push @ret, {
- url => urlto_with_orig_beautiful_urlpath(masterpage($page), $page),
- code => $config{po_master_language}{code},
- language => $config{po_master_language}{name},
- master => 1,
- };
- }
- foreach my $lang (@{otherlanguages_codes($page)}) {
- next if $lang eq $config{po_master_language}{code};
- my $otherpage = otherlanguage_page($page, $lang);
- push @ret, {
- url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
- code => $lang,
- language => languagename($lang),
- percent => percenttranslated($otherpage),
+ my %otherpages=%{otherlanguages($page)};
+ while (my ($lang, $otherpage) = each %otherpages) {
+ if (istranslation($page) && masterpage($page) eq $otherpage) {
+ push @ret, {
+ url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
+ code => $lang,
+ language => languagename($lang),
+ master => 1,
+ };
+ }
+ elsif (istranslation($otherpage)) {
+ push @ret, {
+ url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
+ code => $lang,
+ language => languagename($lang),
+ percent => percenttranslated($otherpage),
+ }
}
}
- return @ret;
+ return sort {
+ return -1 if $a->{code} eq $config{po_master_language}{code};
+ return 1 if $b->{code} eq $config{po_master_language}{code};
+ return $a->{language} cmp $b->{language};
+ } @ret;
}
sub homepageurl (;$) {
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 < 100) {
+ elsif ($percenttranslated < $wanted) {
return IkiWiki::SuccessReason->new("file has $percenttranslated translated");
}
else {
- return IkiWiki::FailReason->new("file is fully translated");
+ return IkiWiki::FailReason->new("file is translated enough");
}
}