03dcngettext_xs.t 3.7 KB

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