03dngettext_xs.t 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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 dngettext);
  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 = dngettext (not_here => $strings[0], $strings[1], $_);
  37. ok $translation, $_ == 1 ? 'Singular' : 'Plural';
  38. }
  39. Locale::Messages::nl_putenv ("LANGUAGE=C");
  40. Locale::Messages::nl_putenv ("LC_ALL=C");
  41. Locale::Messages::nl_putenv ("LANG=C");
  42. Locale::Messages::nl_putenv ("LC_MESSAGES=C");
  43. POSIX::setlocale (POSIX::LC_ALL() => '');
  44. my $bound_dir = bindtextdomain existing => $locale_dir;
  45. ok defined $bound_dir;
  46. ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir));
  47. for (0 .. 9) {
  48. my $translation = dngettext (existing => $strings[0], $strings[1], $_);
  49. my $expected = $_ == 1 ? 'Singular' : 'Plural';
  50. ok $translation, $expected;
  51. }
  52. Locale::Messages::nl_putenv ("LANGUAGE=de_AT");
  53. Locale::Messages::nl_putenv ("LC_ALL=de_AT");
  54. Locale::Messages::nl_putenv ("LANG=de_AT");
  55. Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT");
  56. my $missing_locale = 'locale de_AT missing';
  57. my $setlocale = POSIX::setlocale (POSIX::LC_ALL() => '');
  58. if ($setlocale && $setlocale =~ /(?:austria|at)/i) {
  59. $missing_locale = '';
  60. } else {
  61. require Locale::Util;
  62. $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT');
  63. if ($setlocale && $setlocale =~ /(?:austria|at)/i) {
  64. $missing_locale = '';
  65. }
  66. }
  67. for (0 .. 9) {
  68. my $translation = dngettext (existing => $strings[0], $strings[1], $_);
  69. skip $missing_locale,
  70. $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 = dngettext (additional => $strings[0], $strings[1], $_);
  82. my $expected = $_ == 1 ? 'Singular' : 'Plural';
  83. ok $translation, $expected;
  84. }
  85. Locale::Messages::nl_putenv ("LANGUAGE=de_AT");
  86. Locale::Messages::nl_putenv ("LC_ALL=de_AT");
  87. Locale::Messages::nl_putenv ("LANG=de_AT");
  88. Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT");
  89. POSIX::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale;
  90. for (0 .. 40) {
  91. my $translation = dngettext (additional => $strings[0], $strings[1], $_);
  92. my $plural = ($_ == 1 ? 0 :
  93. $_ % 10 == 2 ? 1 :
  94. $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3);
  95. skip $missing_locale, $translation, "Numerus $plural";
  96. }
  97. __END__
  98. Local Variables:
  99. mode: perl
  100. perl-indent-level: 4
  101. perl-continued-statement-offset: 4
  102. perl-continued-brace-offset: 0
  103. perl-brace-offset: -4
  104. perl-brace-imaginary-offset: 0
  105. perl-label-offset: -4
  106. cperl-indent-level: 4
  107. cperl-continued-statement-offset: 2
  108. tab-width: 4
  109. End: