From fbfda5ccfce40d3f0b5a6076ef02f07e9e5b8fd6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Sep 2010 13:13:00 -0400 Subject: [PATCH] po: Make the po_master_language use a langpair like "en|English", so it can be configured via the web. --- IkiWiki/Plugin/po.pm | 81 +++++++++++++++++++++++++++----------------- debian/changelog | 2 ++ doc/plugins/po.mdwn | 2 +- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 651c98ed7..a233fb5af 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -25,6 +25,7 @@ use File::Temp; use Memoize; use UNIVERSAL; +my ($master_language_code, $master_language_name); my %translations; my @origneedsbuild; my %origsubs; @@ -95,10 +96,7 @@ sub getsetup () { }, po_master_language => { type => "string", - example => { - 'code' => 'en', - 'name' => 'English' - }, + example => "en|English", description => "master language (non-PO files)", safe => 1, rebuild => 1, @@ -132,24 +130,31 @@ sub getsetup () { } sub checkconfig () { - foreach my $field (qw{po_master_language}) { - if (! exists $config{$field} || ! defined $config{$field}) { - error(sprintf(gettext("Must specify %s when using the %s plugin"), - $field, 'po')); + if (exists $config{po_master_language}) { + if (! ref $config{po_master_language}) { + ($master_language_code, $master_language_name)= + splitlangpair($config{po_master_language}); } + else { + $master_language_code=$config{po_master_language}{code}; + $master_language_name=$config{po_master_language}{name}; + } + } + if (! defined $master_language_code) { + $master_language_code='en'; + } + if (! defined $master_language_name) { + $master_language_name='English'; } if (ref $config{po_slave_languages} eq 'ARRAY') { my %slaves; foreach my $pair (@{$config{po_slave_languages}}) { - my ($code, $name) = ( $pair =~ /^([a-z]{2})\|(.+)$/ ); - if (!defined $code || !defined $name) { - error(sprintf(gettext("%s has invalid syntax: must use CODE|NAME"), - $pair)); + my ($code, $name)=splitlangpair($pair); + if (defined $code) { + push @slavelanguages, $code; + $slaves{$code} = $name; } - $slaves{$code} = $name; - push @slavelanguages, $code; - } $config{po_slave_languages} = \%slaves; } @@ -159,12 +164,12 @@ sub checkconfig () { } keys %{$config{po_slave_languages}}; } - delete $config{po_slave_languages}{$config{po_master_language}{code}};; + delete $config{po_slave_languages}{$master_language_code}; map { islanguagecode($_) or error(sprintf(gettext("%s is not a valid language code"), $_)); - } ($config{po_master_language}{code}, @slavelanguages); + } ($master_language_code, @slavelanguages); if (! exists $config{po_translatable_pages} || ! defined $config{po_translatable_pages}) { @@ -198,11 +203,11 @@ sub checkconfig () { if -d "$config{underlaydirbase}/po/$ll/$underlay"; } - if ($config{po_master_language}{code} ne 'en') { + if ($master_language_code ne 'en') { # Add underlay containing translated source files # for the master language. - add_underlay("locale/$config{po_master_language}{code}/$underlay") - if -d "$config{underlaydirbase}/locale/$config{po_master_language}{code}/$underlay"; + add_underlay("locale/$master_language_code/$underlay") + if -d "$config{underlaydirbase}/locale/$master_language_code/$underlay"; } } } @@ -512,7 +517,7 @@ sub formbuilder_setup (@) { if ($form->field("do") eq "create") { # Warn the user: new pages must be written in master language. my $template=template("pocreatepage.tmpl"); - $template->param(LANG => $config{po_master_language}{name}); + $template->param(LANG => $master_language_name); $form->tmpl_param(message => $template->output); } elsif ($form->field("do") eq "edit") { @@ -601,7 +606,7 @@ sub mybeautify_urlpath ($) { my $res=$origsubs{'beautify_urlpath'}->($url); if (defined $config{po_link_to} && $config{po_link_to} eq "negotiated") { - $res =~ s!/\Qindex.$config{po_master_language}{code}.$config{htmlext}\E$!/!; + $res =~ s!/\Qindex.$master_language_code.$config{htmlext}\E$!/!; $res =~ s!/\Qindex.$config{htmlext}\E$!/!; map { $res =~ s!/\Qindex.$_.$config{htmlext}\E$!/!; @@ -824,7 +829,7 @@ sub lang ($) { if (1 < (my ($masterpage, $lang) = _istranslation($page))) { return $lang; } - return $config{po_master_language}{code}; + return $master_language_code; } sub islanguagecode ($) { @@ -837,7 +842,7 @@ sub otherlanguage_page ($$) { my $page=shift; my $code=shift; - return masterpage($page) if $code eq $config{po_master_language}{code}; + return masterpage($page) if $code eq $master_language_code; return masterpage($page) . '.' . $code; } @@ -851,9 +856,9 @@ sub otherlanguages_codes ($) { return \@ret unless istranslation($page) || istranslatable($page); my $curlang=lang($page); foreach my $lang - ($config{po_master_language}{code}, @slavelanguages) { + ($master_language_code, @slavelanguages) { next if $lang eq $curlang; - if ($lang eq $config{po_master_language}{code} || + if ($lang eq $master_language_code || istranslatedto(masterpage($page), $lang)) { push @ret, $lang; } @@ -1008,8 +1013,8 @@ sub percenttranslated ($) { sub languagename ($) { my $code=shift; - return $config{po_master_language}{name} - if $code eq $config{po_master_language}{code}; + return $master_language_name + if $code eq $master_language_code; return $config{po_slave_languages}{$code} if defined $config{po_slave_languages}{$code}; return; @@ -1022,13 +1027,13 @@ sub otherlanguagesloop ($) { 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}, + code => $master_language_code, + language => $master_language_name, master => 1, }; } foreach my $lang (@{otherlanguages_codes($page)}) { - next if $lang eq $config{po_master_language}{code}; + next if $lang eq $master_language_code; my $otherpage = otherlanguage_page($page, $lang); push @ret, { url => urlto_with_orig_beautiful_urlpath($otherpage, $page), @@ -1233,6 +1238,20 @@ sub po4a_options($) { return %options; } +sub splitlangpair ($) { + my $pair=shift; + + my ($code, $name) = ( $pair =~ /^([a-z]{2})\|(.+)$/ ); + if (! defined $code || ! defined $name || + ! length $code || ! length $name) { + # not a fatal error to avoid breaking if used with web setup + print STDERR sprintf(gettext("%s has invalid syntax: must use CODE|NAME"), + $pair)."\n"; + } + + return $code, $name; +} + # ,---- # | PageSpecs # `---- diff --git a/debian/changelog b/debian/changelog index ebccf4698..72b220a4f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ ikiwiki (3.20100832) UNRELEASED; urgency=low perl taint checking happy, but taint checking is disabled. * teximg: Use Unicode UTF-8 encoding by default. Closes: #596067 Thanks, Paul Menzel. + * po: Make the po_master_language use a langpair like "en|English", + so it can be configured via the web. * po: Allow enabling via web setup. -- Joey Hess Tue, 07 Sep 2010 12:08:05 -0400 diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn index da58a9f49..2acbc366a 100644 --- a/doc/plugins/po.mdwn +++ b/doc/plugins/po.mdwn @@ -49,7 +49,7 @@ Supported languages `po_master_language` is used to set the "master" language in `ikiwiki.setup`, such as: - po_master_language => { 'code' => 'en', 'name' => 'English' } + po_master_language => 'en|English' `po_slave_languages` is used to set the list of supported "slave" languages, such as: -- 2.26.2