-# Time-stamp: "2004-03-30 18:21:55 AST"
+# Time-stamp: "2004-06-17 23:04:06 PDT"
# Sean M. Burke <sburke@cpan.org>
require 5.000;
);
%EXPORT_TAGS = ('ALL' => \@EXPORT_OK);
-$VERSION = "0.30";
+$VERSION = "0.31";
sub uniq { my %seen; return grep(!($seen{$_}++), @_); } # a util function
Revision history for Perl module I18N::LangTags.
- Time-stamp: "2004-03-30 21:38:00 AST"
+ Time-stamp: "2004-06-17 23:07:01 PDT"
+2004-06-17 Sean M. Burke sburke@cpan.org
+
+ * Release 0.31
+
+ Corrected some unevennesses in when/whether the return values from
+ I18N::LangTags::Detect's various internal functions would be
+ downcased. Now they're /always/ downcased, and are /always/ fed
+ thru alternate_language_tags()!
+
+ Also, spiffed up and generally improved the earlier test
+ 80_all_env.t, which not even I could make sense of, and I wrote
+ the damned thing. Now it's sane, and checks both scalar and
+ list return values. Thanks to Rafael Garcia-Suarez and the
+ various CPAN-Testers for prodding me to fix this. (Hopefully the
+ earlier problems /are/ now fixed! Otherwise there'll be another
+ version of this module out real soon!)
+
+
2004-03-30 Sean M. Burke sburke@cpan.org
* Release 0.30
Thanks to Autrijus Tang for catching some errors in my makefile!
-
+
2003-10-10 Sean M. Burke sburke@cpan.org
-# Time-stamp: "2004-03-30 17:28:24 AST"
+# Time-stamp: "2004-06-17 22:59:06 PDT"
require 5;
package I18N::LangTags::Detect;
BEGIN { unless(defined &DEBUG) { *DEBUG = sub () {0} } }
# define the constant 'DEBUG' at compile-time
-$VERSION = "1.01";
+$VERSION = "1.02";
@ISA = ();
use I18N::LangTags qw(alternate_language_tags locale2language_tag);
-sub uniq { my %seen; return grep(!($seen{$_}++), @_); }
+sub _uniq { my %seen; return grep(!($seen{$_}++), @_); }
+sub _normalize {
+ my(@languages) =
+ map lc($_),
+ grep $_,
+ map {; $_, alternate_language_tags($_) } @_;
+ return _uniq(@languages) if wantarray;
+ return $languages[0];
+}
#---------------------------------------------------------------------------
# The extent of our functional interface:
push @languages, Win32::Locale::get_language() || ''
if defined &Win32::Locale::get_language;
}
-
- @languages = map {; $_, alternate_language_tags($_) } @languages;
-
- return uniq(@languages) if wantarray;
- return $languages[0];
+ return _normalize @languages;
}
#---------------------------------------------------------------------------
if( $in =~ m/^\s*([a-zA-Z][-a-zA-Z]+)\s*$/s ) {
# Very common case: just one language tag
- return lc $1;
+ return _normalize $1;
} elsif( $in =~ m/^\s*[a-zA-Z][-a-zA-Z]+(?:\s*,\s*[a-zA-Z][-a-zA-Z]+)*\s*$/s ) {
# Common case these days: just "foo, bar, baz"
- return map lc($_), $in =~ m/([a-zA-Z][-a-zA-Z]+)/g;
+ return _normalize( $in =~ m/([a-zA-Z][-a-zA-Z]+)/g );
}
# Else it's complicated...
push @{ $pref{$q} }, lc $1;
}
- return # Read off %pref, in descending key order...
+ return _normalize(
+ # Read off %pref, in descending key order...
map @{$pref{$_}},
sort {$b <=> $a}
- keys %pref;
+ keys %pref
+ );
}
#===========================================================================
-# Time-stamp: "2004-03-30 16:59:14 AST"
+# Time-stamp: "2004-06-17 23:06:22 PDT"
use I18N::LangTags::Detect;
[ en-us ] en-US
[ en-us ] EN-US
-[ en-au en i-klingon en-gb en-us mt-mt mt ja ] EN-au, JA;q=0.14, i-klingon;q=0.83, en-gb;q=0.71, en-us;q=0.57, mt-mt;q=0.43, mt;q=0.29, en;q=0.86
-[ en-au en i-klingon en-gb en-us mt-mt mt tli ja ] EN-au, tli;q=0.201, JA;q=0.14, i-klingon;q=0.83, en-gb;q=0.71, en-us;q=0.57, mt-mt;q=0.43, mt;q=0.29, en;q=0.86
+[ en-au en i-klingon x-klingon en-gb en-us mt-mt mt ja ] EN-au, JA;q=0.14, i-klingon;q=0.83, en-gb;q=0.71, en-us;q=0.57, mt-mt;q=0.43, mt;q=0.29, en;q=0.86
+[ en-au en i-klingon x-klingon en-gb en-us mt-mt mt tli ja ] EN-au, tli;q=0.201, JA;q=0.14, i-klingon;q=0.83, en-gb;q=0.71, en-us;q=0.57, mt-mt;q=0.43, mt;q=0.29, en;q=0.86
[ en-au en en-gb en-us ja ] en-au, ja;q=0.20, en-gb;q=0.60, en-us;q=0.40, en;q=0.80
[ en-au en en-gb en-us mt-mt mt ja ] EN-au, JA;q=0.14, en-gb;q=0.71, en-us;q=0.57, mt-mt;q=0.43, mt;q=0.29, en;q=0.86
require 5;
use Test;
-# Time-stamp: "2004-03-30 17:51:06 AST"
-BEGIN { plan tests => 9; }
+# Time-stamp: "2004-06-17 22:59:30 PDT"
+BEGIN { plan tests => 14; }
use I18N::LangTags::Detect 1.01;
print "# Hi there...\n";
ok 1;
+print "# Using I18N::LangTags::Detect v$I18N::LangTags::Detect::VERSION\n";
+
print "# Make sure we can assign to ENV entries\n",
"# (Otherwise we can't run the subsequent tests)...\n";
$ENV{'MYORP'} = 'Zing'; ok $ENV{'MYORP'}, 'Zing';
delete $ENV{'MYORP'};
delete $ENV{'SWUZ'};
-sub show { print "# (Seeing [@_] at line ", (caller)[2], ")\n"; return @_ }
+sub j { "[" . join(' ', map "\"$_\"", @_) . "]" ;}
+
+sub show {
+ print "# (Seeing {", join(' ',
+ map(qq{<$_>}, @_)), "} at line ", (caller)[2], ")\n";
+ printenv();
+ return $_[0] || '';
+}
+sub printenv {
+ print "# ENV:\n";
+ foreach my $k (sort keys %ENV) {
+ my $p = $ENV{$k}; $p =~ s/\n/\n#/g;
+ print "# [$k] = [$p]\n"; }
+ print "# [end of ENV]\n#\n";
+}
+
print "# Test LANG...\n";
$ENV{'REQUEST_METHOD'} = '';
$ENV{'LANG'} = 'Eu_MT';
$ENV{'LANGUAGE'} = '';
-ok show I18N::LangTags::Detect::detect();
+ok show( scalar I18N::LangTags::Detect::detect()), "eu-mt";
+ok show( j I18N::LangTags::Detect::detect()), q{["eu-mt"]};
print "# Test LANGUAGE...\n";
$ENV{'LANG'} = '';
$ENV{'LANGUAGE'} = 'Eu-MT';
-ok show I18N::LangTags::Detect::detect();
+ok show( scalar I18N::LangTags::Detect::detect()), "eu-mt";
+ok show( j I18N::LangTags::Detect::detect()), q{["eu-mt"]};
print "# Test HTTP_ACCEPT_LANGUAGE...\n";
$ENV{'REQUEST_METHOD'} = 'GET';
$ENV{'HTTP_ACCEPT_LANGUAGE'} = 'eu-MT';
-ok show I18N::LangTags::Detect::detect();
+ok show( scalar I18N::LangTags::Detect::detect()), "eu-mt";
+ok show( j I18N::LangTags::Detect::detect()), q{["eu-mt"]};
+
$ENV{'HTTP_ACCEPT_LANGUAGE'} = 'x-plorp, zaz, eu-MT, i-klung';
-ok show I18N::LangTags::Detect::detect();
+ok show( scalar I18N::LangTags::Detect::detect()), "x-plorp";
+ok show( j I18N::LangTags::Detect::detect()), qq{["x-plorp" "i-plorp" "zaz" "eu-mt" "i-klung" "x-klung"]};
$ENV{'HTTP_ACCEPT_LANGUAGE'} = 'x-plorp, zaz, eU-Mt, i-klung';
-ok show I18N::LangTags::Detect::detect();
+ok show( scalar I18N::LangTags::Detect::detect()), "x-plorp";
+ok show( j I18N::LangTags::Detect::detect()), qq{["x-plorp" "i-plorp" "zaz" "eu-mt" "i-klung" "x-klung"]};
+