X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/8084c79f920e5b4cb961dc6df3641a0253384eb5..d134a2a6e93bbb26664b027a10d98ac996a63cfc:/IkiWiki/Plugin/po.pm diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index ec58c515b..287b5aa11 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -23,7 +23,6 @@ use File::Copy; use File::Spec; use File::Temp; use Memoize; -use UNIVERSAL; my ($master_language_code, $master_language_name); my %translations; @@ -31,6 +30,7 @@ my @origneedsbuild; my %origsubs; my @slavelanguages; # language codes ordered as in config po_slave_languages my %slavelanguages; # language code to name lookup +my $language_code_pattern = '[a-zA-Z]+(?:_[a-zA-Z]+)?'; memoize("istranslatable"); memoize("_istranslation"); @@ -342,6 +342,13 @@ sub pagetemplate (@) { if ($template->query(name => "istranslatable")) { $template->param(istranslatable => istranslatable($page)); } + my $lang_code = istranslation($page) ? lang($page) : $master_language_code; + if ($template->query(name => "lang_code")) { + $template->param(lang_code => $lang_code); + } + if ($template->query(name => "lang_name")) { + $template->param(lang_name => languagename($lang_code)); + } if ($template->query(name => "HOMEPAGEURL")) { $template->param(homepageurl => homepageurl($page)); } @@ -811,7 +818,7 @@ sub _istranslation ($) { && pagetype($file) eq 'po'; return 0 if $file =~ /\.pot$/; - my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/); + my ($masterpage, $lang) = ($page =~ /(.*)[.]($language_code_pattern)$/); return 0 unless defined $masterpage && defined $lang && length $masterpage && length $lang && defined $pagesources{$masterpage} @@ -853,7 +860,7 @@ sub lang ($) { sub islanguagecode ($) { my $code=shift; - return $code =~ /^[a-z]{2}$/; + return $code =~ /^$language_code_pattern$/; } sub otherlanguage_page ($$) { @@ -1260,7 +1267,7 @@ sub po4a_options($) { sub splitlangpair ($) { my $pair=shift; - my ($code, $name) = ( $pair =~ /^([a-z]{2})\|(.+)$/ ); + my ($code, $name) = ( $pair =~ /^($language_code_pattern)\|(.+)$/ ); if (! defined $code || ! defined $name || ! length $code || ! length $name) { # not a fatal error to avoid breaking if used with web setup