1#! /usr/local/bin/perl -w 2 3# vim: syntax=perl 4# vim: tabstop=4 5 6use strict; 7 8use Test; 9 10use constant NUM_TESTS => 85; 11 12use Locale::Messages qw (bindtextdomain dcngettext LC_MESSAGES); 13require POSIX; 14require File::Spec; 15 16BEGIN { 17 my $package; 18 if ($0 =~ /_pp\.t$/) { 19 $package = 'gettext_pp'; 20 } else { 21 $package = 'gettext_xs'; 22 } 23 24 my $selected = Locale::Messages->select_package ($package); 25 if ($selected ne $package && 'gettext_xs' eq $package) { 26 print "1..0 # Skip: Locale::$package not available here.\n"; 27 exit 0; 28 } 29 plan tests => NUM_TESTS; 30} 31 32Locale::Messages::nl_putenv ("LANGUAGE=C"); 33Locale::Messages::nl_putenv ("LC_ALL=C"); 34Locale::Messages::nl_putenv ("LANG=C"); 35Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 36Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); 37Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 38 39my $locale_dir = $0; 40$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; 41$locale_dir .= '/LocaleData'; 42 43bindtextdomain not_here => $locale_dir; 44 45my @strings = qw (Singular Plural); 46for (0 .. 9) { 47 my $translation = dcngettext (not_here => $strings[0], $strings[1], $_, LC_MESSAGES); 48 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 49 ok $translation, $expected; 50} 51 52Locale::Messages::nl_putenv ("LANGUAGE=C"); 53Locale::Messages::nl_putenv ("LC_ALL=C"); 54Locale::Messages::nl_putenv ("LANG=C"); 55Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 56 57Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 58 59my $bound_dir = bindtextdomain existing => $locale_dir; 60 61ok defined $bound_dir; 62ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); 63 64for (0 .. 9) { 65 my $translation = dcngettext (existing => $strings[0], $strings[1], $_, LC_MESSAGES); 66 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 67 ok $translation, $expected; 68} 69 70Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); 71Locale::Messages::nl_putenv ("LC_ALL=de_AT"); 72Locale::Messages::nl_putenv ("LANG=de_AT"); 73Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); 74 75my $missing_locale = 'locale de_AT missing'; 76my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 77if ($setlocale && $setlocale =~ /(?:austria|at)/i) { 78 $missing_locale = ''; 79} else { 80 require Locale::Util; 81 82 $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); 83 if ($setlocale && $setlocale =~ /(?:austria|at)/i) { 84 $missing_locale = ''; 85 } 86} 87 88for (0 .. 9) { 89 my $translation = dcngettext (existing => $strings[0], $strings[1], $_, LC_MESSAGES); 90 skip $missing_locale, $translation, $_ == 1 ? 'Einzahl' : 'Mehrzahl'; 91} 92 93Locale::Messages::nl_putenv ("LANGUAGE=C"); 94Locale::Messages::nl_putenv ("LC_ALL=C"); 95Locale::Messages::nl_putenv ("LANG=C"); 96Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 97 98Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 99 100$bound_dir = bindtextdomain additional => $locale_dir; 101 102ok defined $bound_dir; 103ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); 104 105for (0 .. 9) { 106 my $translation = dcngettext (additional => $strings[0], $strings[1], $_, LC_MESSAGES); 107 ok $translation, $_ == 1 ? 'Singular' : 'Plural'; 108} 109 110Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); 111Locale::Messages::nl_putenv ("LC_ALL=de_AT"); 112Locale::Messages::nl_putenv ("LANG=de_AT"); 113Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); 114 115Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; 116 117for (0 .. 40) { 118 my $translation = dcngettext (additional => $strings[0], $strings[1], $_, LC_MESSAGES); 119 my $plural = ($_ == 1 ? 0 : 120 $_ % 10 == 2 ? 1 : 121 $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); 122 skip $missing_locale, $translation, "Numerus $plural"; 123} 124 125__END__ 126 127Local Variables: 128mode: perl 129perl-indent-level: 4 130perl-continued-statement-offset: 4 131perl-continued-brace-offset: 0 132perl-brace-offset: -4 133perl-brace-imaginary-offset: 0 134perl-label-offset: -4 135cperl-indent-level: 4 136cperl-continued-statement-offset: 2 137tab-width: 4 138End: 139 140