617d8c2a17de00277e1ba133436d7597b3edd5ad
   1package Git::I18N;
   2use 5.008;
   3use strict;
   4use warnings;
   5BEGIN {
   6        require Exporter;
   7        if ($] < 5.008003) {
   8                *import = \&Exporter::import;
   9        } else {
  10                # Exporter 5.57 which supports this invocation was
  11                # released with perl 5.8.3
  12                Exporter->import('import');
  13        }
  14}
  15
  16our @EXPORT = qw(__ __n);
  17our @EXPORT_OK = @EXPORT;
  18
  19sub __bootstrap_locale_messages {
  20        our $TEXTDOMAIN = 'git';
  21        our $TEXTDOMAINDIR = $ENV{GIT_TEXTDOMAINDIR} || '++LOCALEDIR++';
  22
  23        require POSIX;
  24        POSIX->import(qw(setlocale));
  25        # Non-core prerequisite module
  26        require Locale::Messages;
  27        Locale::Messages->import(qw(:locale_h :libintl_h));
  28
  29        setlocale(LC_MESSAGES(), '');
  30        setlocale(LC_CTYPE(), '');
  31        textdomain($TEXTDOMAIN);
  32        bindtextdomain($TEXTDOMAIN => $TEXTDOMAINDIR);
  33
  34        return;
  35}
  36
  37BEGIN
  38{
  39        # Used by our test script to see if it should test fallbacks or
  40        # not.
  41        our $__HAS_LIBRARY = 1;
  42
  43        local $@;
  44        eval {
  45                __bootstrap_locale_messages();
  46                *__ = \&Locale::Messages::gettext;
  47                *__n = \&Locale::Messages::ngettext;
  48                1;
  49        } or do {
  50                # Tell test.pl that we couldn't load the gettext library.
  51                $Git::I18N::__HAS_LIBRARY = 0;
  52
  53                # Just a fall-through no-op
  54                *__ = sub ($) { $_[0] };
  55                *__n = sub ($$$) { $_[2] == 1 ? $_[0] : $_[1] };
  56        };
  57}
  58
  591;
  60
  61__END__
  62
  63=head1 NAME
  64
  65Git::I18N - Perl interface to Git's Gettext localizations
  66
  67=head1 SYNOPSIS
  68
  69        use Git::I18N;
  70
  71        print __("Welcome to Git!\n");
  72
  73        printf __("The following error occurred: %s\n"), $error;
  74
  75        printf __n("commited %d file\n", "commited %d files\n", $files), $files;
  76
  77=head1 DESCRIPTION
  78
  79Git's internal Perl interface to gettext via L<Locale::Messages>. If
  80L<Locale::Messages> can't be loaded (it's not a core module) we
  81provide stub passthrough fallbacks.
  82
  83This is a distilled interface to gettext, see C<info '(gettext)Perl'>
  84for the full interface. This module implements only a small part of
  85it.
  86
  87=head1 FUNCTIONS
  88
  89=head2 __($)
  90
  91L<Locale::Messages>'s gettext function if all goes well, otherwise our
  92passthrough fallback function.
  93
  94=head2 __n($$$)
  95
  96L<Locale::Messages>'s ngettext function or passthrough fallback function.
  97
  98=head1 AUTHOR
  99
 100E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
 101
 102=head1 COPYRIGHT
 103
 104Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
 105
 106=cut