summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2010-07-18 20:03:04 -0400
committerJoey Hess <joey@kitenet.net>2010-07-18 20:04:39 -0400
commit35c9956df0cb92a1088d763a45e863079bfd8e50 (patch)
treee783747d4ae0899ee22441f11ca6580966b72b67
parentdef97ec7fe5f84c0d1931ff2c0f8b33b78fed114 (diff)
Revert "po_slave_languages can now be a hash, if order matters."
This reverts commit 4cf185e781a5f94373b30ec9a0e10dfb626b6d86. 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
-rw-r--r--IkiWiki/Plugin/po.pm98
-rw-r--r--doc/plugins/po.mdwn4
2 files changed, 37 insertions, 65 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index dc73c73c3..224412676 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -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 (;$) {
diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn
index d6f82912c..53327c1da 100644
--- a/doc/plugins/po.mdwn
+++ b/doc/plugins/po.mdwn
@@ -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
-----------------------------------