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 => 88; 11 12use Locale::Messages qw (bindtextdomain textdomain ngettext); 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; 45textdomain 'not_here'; 46 47my @strings = qw (Singular Plural); 48for (0 .. 9) { 49 # Prototype checking fails here if you pass the list @strings. 50 my $translation = ngettext ($strings[0], $strings[1], $_); 51 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 52 ok $translation, $expected; 53} 54 55my $textdomain = 'existing'; 56Locale::Messages::nl_putenv ("LANGUAGE=C"); 57Locale::Messages::nl_putenv ("LC_ALL=C"); 58Locale::Messages::nl_putenv ("LANG=C"); 59Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 60 61Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 62 63my $bound_dir = bindtextdomain $textdomain => $locale_dir; 64 65ok defined $bound_dir; 66ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); 67 68my $bound_domain = textdomain $textdomain; 69 70ok defined $bound_domain && $textdomain eq $bound_domain; 71 72for (0 .. 9) { 73 my $translation = ngettext ($strings[0], $strings[1], $_); 74 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 75 ok $translation, $expected; 76} 77 78Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); 79Locale::Messages::nl_putenv ("LC_ALL=de_AT"); 80Locale::Messages::nl_putenv ("LANG=de_AT"); 81Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); 82 83my $missing_locale = 'locale de_AT missing'; 84my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 85if ($setlocale && $setlocale =~ /(?:austria|at)/i) { 86 $missing_locale = ''; 87} else { 88 require Locale::Util; 89 90 $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); 91 if ($setlocale && $setlocale =~ /(?:austria|at)/i) { 92 $missing_locale = ''; 93 } 94} 95 96for (0 .. 9) { 97 my $translation = ngettext ($strings[0], $strings[1], $_); 98 my $expected = $_ == 1 ? 'Einzahl' : 'Mehrzahl'; 99 skip $missing_locale, $translation, $expected; 100} 101 102$textdomain = 'additional'; 103Locale::Messages::nl_putenv ("LANGUAGE=C"); 104Locale::Messages::nl_putenv ("LC_ALL=C"); 105Locale::Messages::nl_putenv ("LANG=C"); 106Locale::Messages::nl_putenv ("LC_MESSAGES=C"); 107 108Locale::Messages::setlocale (POSIX::LC_ALL() => ''); 109 110$bound_dir = bindtextdomain $textdomain => $locale_dir; 111 112ok defined $bound_dir; 113ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); 114 115$bound_domain = textdomain $textdomain; 116 117ok defined $bound_domain; 118ok $bound_domain, $textdomain; 119 120for (0 .. 9) { 121 my $translation = ngettext ($strings[0], $strings[1], $_); 122 my $expected = $_ == 1 ? 'Singular' : 'Plural'; 123 ok $translation, $expected; 124} 125 126Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); 127Locale::Messages::nl_putenv ("LC_ALL=de_AT"); 128Locale::Messages::nl_putenv ("LANG=de_AT"); 129Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); 130 131Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; 132 133for (0 .. 40) { 134 my $translation = ngettext ($strings[0], $strings[1], $_); 135 my $plural = ($_ == 1 ? 0 : 136 $_ % 10 == 2 ? 1 : 137 $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); 138 skip $missing_locale, $translation, "Numerus $plural"; 139} 140 141__END__ 142 143Local Variables: 144mode: perl 145perl-indent-level: 4 146perl-continued-statement-offset: 4 147perl-continued-brace-offset: 0 148perl-brace-offset: -4 149perl-brace-imaginary-offset: 0 150perl-label-offset: -4 151cperl-indent-level: 4 152cperl-continued-statement-offset: 2 153tab-width: 4 154End: 155 156