From: intrigeri <intrigeri@boum.org>
Date: Wed, 25 May 2011 16:01:40 +0000 (+0200)
Subject: po: support language codes in the form of 'es_AR', and 'arn'.
X-Git-Tag: 3.20110431~20^2
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/3cd0c1f91a8e4b7accfe75d132066b79da4379fd?ds=sidebyside

po: support language codes in the form of 'es_AR', and 'arn'.

... additionally to the previously supported two-letters codes.
---

diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 9ccc79268..d3a996a21 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -31,6 +31,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");
@@ -811,7 +812,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 +854,7 @@ sub lang ($) {
 sub islanguagecode ($) {
 	my $code=shift;
 
-	return $code =~ /^[a-z]{2}$/;
+	return $code =~ /^$language_code_pattern$/;
 }
 
 sub otherlanguage_page ($$) {
@@ -1259,7 +1260,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
diff --git a/t/po.t b/t/po.t
index da0bd68a7..5e251fce4 100755
--- a/t/po.t
+++ b/t/po.t
@@ -17,7 +17,7 @@ BEGIN {
 	}
 }
 
-use Test::More tests => 109;
+use Test::More tests => 114;
 
 BEGIN { use_ok("IkiWiki"); }
 
@@ -241,3 +241,10 @@ ok(! IkiWiki::Plugin::po::istranslatedto('nontranslatable', 'es'));
 ok(! IkiWiki::Plugin::po::istranslatedto('nontranslatable', 'cz'));
 ok(! IkiWiki::Plugin::po::istranslatedto('test1.es', 'fr'));
 ok(! IkiWiki::Plugin::po::istranslatedto('test1.fr', 'es'));
+
+### islanguagecode
+ok(IkiWiki::Plugin::po::islanguagecode('en'));
+ok(IkiWiki::Plugin::po::islanguagecode('es'));
+ok(IkiWiki::Plugin::po::islanguagecode('arn'));
+ok(! IkiWiki::Plugin::po::islanguagecode('es_'));
+ok(! IkiWiki::Plugin::po::islanguagecode('_en'));