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 dngettext); 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"); 37 38Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 39 40my $locale_dir = $0; 41$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; 42$locale_dir .= '/LocaleData'; 43 44bindtextdomain not_here => $locale_dir; 45 46my @strings = qw (Singular Plural); 47for (0 .. 9) { 48 my $translation = dngettext (not_here => $strings[0], $strings[1], $_); 49 ok $translation, $_ == 1 ? 'Singular' : 'Plural'; 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 = dngettext (existing => $strings[0], $strings[1], $_); 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 = dngettext (existing => $strings[0], $strings[1], $_); 90 skip $missing_locale, 91 $translation, $_ == 1 ? 'Einzahl' : 'Mehrzahl'; 92} 93 94Locale::Messages::nl_putenv ("LANGUAGE=C"); 95Locale::Messages::nl_putenv ("LC_ALL=C"); 96Locale::Messages::nl_putenv ("LANG=C"); 97Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 98 99Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 100 101$bound_dir = bindtextdomain additional => $locale_dir; 102 103ok defined $bound_dir; 104ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); 105 106for (0 .. 9) { 107 my $translation = dngettext (additional => $strings[0], $strings[1], $_); 108 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 109 ok $translation, $expected; 110} 111 112Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); 113Locale::Messages::nl_putenv ("LC_ALL=de_AT"); 114Locale::Messages::nl_putenv ("LANG=de_AT"); 115Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); 116 117Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; 118 119for (0 .. 40) { 120 my $translation = dngettext (additional => $strings[0], $strings[1], $_); 121 my $plural = ($_ == 1 ? 0 : 122 $_ % 10 == 2 ? 1 : 123 $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); 124 skip $missing_locale, $translation, "Numerus $plural"; 125} 126 127__END__ 128 129Local Variables: 130mode: perl 131perl-indent-level: 4 132perl-continued-statement-offset: 4 133perl-continued-brace-offset: 0 134perl-brace-offset: -4 135perl-brace-imaginary-offset: 0 136perl-label-offset: -4 137cperl-indent-level: 4 138cperl-continued-statement-offset: 2 139tab-width: 4 140End: 141 142