Revert "po_slave_languages can now be a hash, if order matters."

This reverts commit 4cf185e781.

That commit broke t/po.t (probably the test case only is testing too
close the the old implementation and needs correcting).

Also, we have not decided how to want to represent it yet, so I'm not
ready for this change.

Conflicts:

	IkiWiki/Plugin/po.pm
	doc/plugins/po.mdwn
master
Joey Hess 2010-07-18 20:03:04 -04:00
parent def97ec7fe
commit 35c9956df0
2 changed files with 37 additions and 65 deletions

View File

@ -28,7 +28,6 @@ use UNIVERSAL;
my %translations;
my @origneedsbuild;
my %origsubs;
my @slavelanguages; # ordered as in config po_slave_languages
memoize("istranslatable");
memoize("_istranslation");
@ -105,11 +104,11 @@ sub getsetup () {
},
po_slave_languages => {
type => "string",
example => [
example => {
'fr' => 'Français',
'es' => 'Español',
'de' => 'Deutsch'
],
},
description => "slave languages (PO files)",
safe => 1,
rebuild => 1,
@ -138,24 +137,6 @@ sub checkconfig () {
$field, 'po'));
}
}
if (ref $config{po_slave_languages} eq 'ARRAY') {
my %slaves;
if (@{$config{po_slave_languages}} % 2 != 0) {
error(sprintf(gettext("The %s field is invalid."), 'po_slave_languages'));
}
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 {
@ -216,7 +197,7 @@ sub needsbuild () {
# 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)};
}
}
@ -248,7 +229,7 @@ sub scan (@) {
# make sure any destpage's translations has
# $page in its backlinks
push @{$links{$page}},
values %{otherlanguages_pages($destpage)};
values %{otherlanguages($destpage)};
}
}
}
@ -306,7 +287,7 @@ sub pagetemplate (@) {
}
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 &&
@ -359,12 +340,12 @@ sub renamepages (@) {
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,
};
@ -831,7 +812,7 @@ sub islanguagecode ($) {
return $code =~ /^[a-z]{2}$/;
}
sub otherlanguage_page ($$) {
sub otherlanguage ($$) {
my $page=shift;
my $code=shift;
@ -839,31 +820,17 @@ sub otherlanguage_page ($$) {
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;
}
@ -1014,25 +981,30 @@ sub otherlanguagesloop ($) {
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 (;$) {

View File

@ -54,10 +54,10 @@ Supported languages
`po_slave_languages` is used to set the list of supported "slave"
languages, such as:
po_slave_languages => [ 'fr' => 'Français',
po_slave_languages => { 'fr' => 'Français',
'es' => 'Español',
'de' => 'Deutsch',
]
}
Decide which pages are translatable
-----------------------------------