po: Make the po_master_language use a langpair like "en|English", so it can be configured via the web.
parent
400aabe82d
commit
fbfda5ccfc
|
@ -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
|
||||
# `----
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue