po: Make the po_master_language use a langpair like "en|English", so it can be config...
authorJoey Hess <joey@kitenet.net>
Fri, 10 Sep 2010 17:13:00 +0000 (13:13 -0400)
committerJoey Hess <joey@kitenet.net>
Fri, 10 Sep 2010 17:13:00 +0000 (13:13 -0400)
IkiWiki/Plugin/po.pm
debian/changelog
doc/plugins/po.mdwn

index 651c98ed7d71107f6080672c89e9493afa870d5f..a233fb5affee8927c2d667244c170bf406982403 100644 (file)
@@ -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
 # `----
index ebccf469878951303d4486246133c57b3082813d..72b220a4fe1a528708d003470b2dd52f300b3e79 100644 (file)
@@ -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 <joeyh@debian.org>  Tue, 07 Sep 2010 12:08:05 -0400
index da58a9f49e632ced500429fad448b69689d3e4c8..2acbc366a033ade129c009cc03c2da9806b0ef7d 100644 (file)
@@ -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: