po: support language codes in the form of 'es_AR', and 'arn'.
authorintrigeri <intrigeri@boum.org>
Wed, 25 May 2011 16:01:40 +0000 (18:01 +0200)
committerintrigeri <intrigeri@boum.org>
Thu, 26 May 2011 07:39:50 +0000 (09:39 +0200)
... additionally to the previously supported two-letters codes.

IkiWiki/Plugin/po.pm
t/po.t

index 9ccc79268b7564a159815da059e6de6adaba8439..d3a996a2189fd24c007ea4127ed0a56faf9d7c8b 100644 (file)
@@ -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 %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");
 
 memoize("istranslatable");
 memoize("_istranslation");
@@ -811,7 +812,7 @@ sub _istranslation ($) {
                         && pagetype($file) eq 'po';
        return 0 if $file =~ /\.pot$/;
 
                         && 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}
        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;
 
 sub islanguagecode ($) {
        my $code=shift;
 
-       return $code =~ /^[a-z]{2}$/;
+       return $code =~ /^$language_code_pattern$/;
 }
 
 sub otherlanguage_page ($$) {
 }
 
 sub otherlanguage_page ($$) {
@@ -1259,7 +1260,7 @@ sub po4a_options($) {
 sub splitlangpair ($) {
        my $pair=shift;
 
 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
        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 da0bd68a7d89e6177ddc811e503444d75c59c264..5e251fce469fa2ad36a874dee6a5d26db520fe93 100755 (executable)
--- 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"); }
 
 
 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'));
 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'));