166
165
# The textdomain could be undef. We avoid a warning by specifying
167
166
# a filter for the undefined textdomain.
169
undef => \&turn_utf_8_off,
174
my ($pkg, $compatibility) = @_;
176
# Compatibility quirk for a bug pre 1.17:
177
if (__PACKAGE__ eq $pkg && defined $compatibility) {
178
$pkg = $compatibility;
181
if (!$can_xs || (defined $pkg && 'gettext_pp' eq $pkg)) {
182
require Locale::gettext_pp;
183
$package = 'gettext_pp';
185
eval "require Locale::gettext_xs";
186
$package = 'gettext_xs' unless $@;
167
my %filters = (undef => \&turn_utf_8_off);
170
my ($pkg, $compatibility) = @_;
172
# Compatibility quirk for a bug pre 1.17:
173
if (__PACKAGE__ eq $pkg && defined $compatibility) {
174
$pkg = $compatibility;
177
if (!$can_xs && 'gettext_xs' eq $pkg) {
181
if (defined $pkg && 'gettext_pp' eq $pkg) {
182
# This branch is not unnecessary. The next (elsif) branch does
183
# essentially the same but catches compilation errors.
184
require Locale::gettext_pp;
185
$package = 'gettext_pp';
186
} elsif (defined $pkg) {
187
my $filename = "Locale::$pkg";
188
$filename =~ s{::|\'}{/};
190
eval { require $filename };
191
$package = $pkg unless $@;
193
eval "require Locale::gettext_xs";
194
$package = 'gettext_xs' unless $@;
192
sub bind_textdomain_filter($;$$)
200
sub bind_textdomain_filter ($;$$) {
194
201
my ($textdomain, $coderef, $data) = @_;
196
203
$filters{$textdomain} = [ $coderef, $data ];
203
'gettext_xs' eq $package ?
204
&Locale::gettext_xs::textdomain :
205
&Locale::gettext_pp::textdomain;
208
sub bindtextdomain($;$)
210
'gettext_xs' eq $package ?
211
&Locale::gettext_xs::bindtextdomain :
212
&Locale::gettext_pp::bindtextdomain;
215
sub bind_textdomain_codeset($;$)
217
'gettext_xs' eq $package ?
218
&Locale::gettext_xs::bind_textdomain_codeset :
219
&Locale::gettext_pp::bind_textdomain_codeset;
224
my $textdomain = textdomain;
225
$filters{$textdomain} ||= [ \&turn_utf_8_off ];
226
my $cb = $filters{$textdomain};
228
$cb->[0] ('gettext_xs' eq $package ?
229
&Locale::gettext_xs::gettext :
230
&Locale::gettext_pp::gettext, $cb->[1]);
235
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
237
$cb->[0] ('gettext_xs' eq $package ?
238
&Locale::gettext_xs::dgettext :
239
&Locale::gettext_pp::dgettext, $cb->[1]);
244
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
246
$cb->[0] ('gettext_xs' eq $package ?
247
&Locale::gettext_xs::dcgettext :
248
&Locale::gettext_pp::dcgettext, $cb->[1]);
253
my $textdomain = textdomain;
254
$filters{$textdomain} ||= [ \&turn_utf_8_off ];
255
my $cb = $filters{$textdomain};
257
$cb->[0] ('gettext_xs' eq $package ?
258
&Locale::gettext_xs::ngettext :
259
&Locale::gettext_pp::ngettext, $cb->[1]);
264
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
266
$cb->[0] ('gettext_xs' eq $package ?
267
&Locale::gettext_xs::dngettext :
268
&Locale::gettext_pp::dngettext, $cb->[1]);
271
sub dcngettext($$$$$)
273
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
275
$cb->[0] ('gettext_xs' eq $package ?
276
&Locale::gettext_xs::dcngettext :
277
&Locale::gettext_pp::dcngettext, $cb->[1]);
283
my $textdomain = textdomain;
284
$filters{$textdomain} ||= [ \&turn_utf_8_off ];
285
my $cb = $filters{$textdomain};
287
$cb->[0] ('gettext_xs' eq $package ?
288
&Locale::gettext_xs::pgettext :
289
&Locale::gettext_pp::pgettext, $cb->[1]);
294
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
296
$cb->[0] ('gettext_xs' eq $package ?
297
&Locale::gettext_xs::dpgettext :
298
&Locale::gettext_pp::dpgettext, $cb->[1]);
303
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
305
$cb->[0] ('gettext_xs' eq $package ?
306
&Locale::gettext_xs::dcpgettext :
307
&Locale::gettext_pp::dcpgettext, $cb->[1]);
312
my $textdomain = textdomain;
313
$filters{$textdomain} ||= [ \&turn_utf_8_off ];
314
my $cb = $filters{$textdomain};
316
$cb->[0] ('gettext_xs' eq $package ?
317
&Locale::gettext_xs::npgettext :
318
&Locale::gettext_pp::npgettext, $cb->[1]);
321
sub dnpgettext($$$$$)
323
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
325
$cb->[0] ('gettext_xs' eq $package ?
326
&Locale::gettext_xs::dnpgettext :
327
&Locale::gettext_pp::dnpgettext, $cb->[1]);
330
sub dcnpgettext($$$$$$)
332
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
334
$cb->[0] ('gettext_xs' eq $package ?
335
&Locale::gettext_xs::dcnpgettext :
336
&Locale::gettext_pp::dcnpgettext, $cb->[1]);
341
'gettext_xs' eq $package ?
342
&Locale::gettext_xs::nl_putenv :
343
&Locale::gettext_pp::nl_putenv;
348
'gettext_xs' eq $package ?
349
&Locale::gettext_xs::LC_NUMERIC :
350
&Locale::gettext_pp::LC_NUMERIC;
355
'gettext_xs' eq $package ?
356
&Locale::gettext_xs::LC_CTYPE :
357
&Locale::gettext_pp::LC_CTYPE;
362
'gettext_xs' eq $package ?
363
&Locale::gettext_xs::LC_TIME :
364
&Locale::gettext_pp::LC_TIME;
369
'gettext_xs' eq $package ?
370
&Locale::gettext_xs::LC_COLLATE :
371
&Locale::gettext_pp::LC_COLLATE;
376
'gettext_xs' eq $package ?
377
&Locale::gettext_xs::LC_MONETARY :
378
&Locale::gettext_pp::LC_MONETARY;
383
'gettext_xs' eq $package ?
384
&Locale::gettext_xs::LC_MESSAGES :
385
&Locale::gettext_pp::LC_MESSAGES;
390
'gettext_xs' eq $package ?
391
&Locale::gettext_xs::LC_ALL :
392
&Locale::gettext_pp::LC_ALL;
208
sub textdomain (;$) {
209
my $function = "Locale::${package}::textdomain";
215
sub bindtextdomain ($;$) {
216
my $function = "Locale::${package}::bindtextdomain";
222
sub bind_textdomain_codeset ($;$) {
223
my $function = "Locale::${package}::bind_textdomain_codeset";
230
my $textdomain = textdomain;
231
$filters{$textdomain} ||= [ \&turn_utf_8_off ];
232
my $cb = $filters{$textdomain};
234
my $function = "Locale::${package}::gettext";
237
$cb->[0] (&$function, $cb->[1]);
241
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
243
my $function = "Locale::${package}::dgettext";
246
$cb->[0] (&$function, $cb->[1]);
250
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
252
my $function = "Locale::${package}::dcgettext";
255
$cb->[0] (&$function, $cb->[1]);
259
my $textdomain = textdomain;
260
$filters{$textdomain} ||= [ \&turn_utf_8_off ];
261
my $cb = $filters{$textdomain};
263
my $function = "Locale::${package}::ngettext";
266
$cb->[0] (&$function, $cb->[1]);
269
sub dngettext($$$$) {
270
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
272
my $function = "Locale::${package}::dngettext";
275
$cb->[0] (&$function, $cb->[1]);
278
sub dcngettext($$$$$) {
279
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
281
my $function = "Locale::${package}::dcngettext";
284
$cb->[0] (&$function, $cb->[1]);
288
my $textdomain = textdomain;
289
$filters{$textdomain} ||= [ \&turn_utf_8_off ];
290
my $cb = $filters{$textdomain};
292
my $function = "Locale::${package}::pgettext";
295
$cb->[0] (&$function, $cb->[1]);
299
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
301
my $function = "Locale::${package}::dpgettext";
304
$cb->[0] (&$function, $cb->[1]);
307
sub dcpgettext($$$$) {
308
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
310
my $function = "Locale::${package}::dcpgettext";
313
$cb->[0] (&$function, $cb->[1]);
316
sub npgettext($$$$) {
317
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
319
my $function = "Locale::${package}::npgettext";
322
$cb->[0] (&$function, $cb->[1]);
325
sub dnpgettext($$$$$) {
326
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
328
my $function = "Locale::${package}::dnpgettext";
331
$cb->[0] (&$function, $cb->[1]);
334
sub dcnpgettext($$$$$$) {
335
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
337
my $function = "Locale::${package}::dcnpgettext";
340
$cb->[0] (&$function, $cb->[1]);
344
my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
346
my $function = "Locale::${package}::nl_putenv";
353
my $function = "Locale::${package}::LC_NUMERIC";
360
my $function = "Locale::${package}::LC_CTYPE";
367
my $function = "Locale::${package}::LC_TIME";
374
my $function = "Locale::${package}::LC_COLLATE";
381
my $function = "Locale::${package}::LC_MONETARY";
388
my $function = "Locale::${package}::LC_MESSAGES";
395
my $function = "Locale::${package}::LC_ALL";