perl / Git / I18N.pmon commit Merge branch 'rs/nedalloc-fixlets' (4336fdb)
   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 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        sub N__($) { return shift; }
  59}
  60
  611;
  62
  63__END__
  64
  65=head1 NAME
  66
  67Git::I18N - Perl interface to Git's Gettext localizations
  68
  69=head1 SYNOPSIS
  70
  71        use Git::I18N;
  72
  73        print __("Welcome to Git!\n");
  74
  75        printf __("The following error occurred: %s\n"), $error;
  76
  77        printf __n("committed %d file\n", "committed %d files\n", $files), $files;
  78
  79
  80=head1 DESCRIPTION
  81
  82Git's internal Perl interface to gettext via L<Locale::Messages>. If
  83L<Locale::Messages> can't be loaded (it's not a core module) we
  84provide stub passthrough fallbacks.
  85
  86This is a distilled interface to gettext, see C<info '(gettext)Perl'>
  87for the full interface. This module implements only a small part of
  88it.
  89
  90=head1 FUNCTIONS
  91
  92=head2 __($)
  93
  94L<Locale::Messages>'s gettext function if all goes well, otherwise our
  95passthrough fallback function.
  96
  97=head2 __n($$$)
  98
  99L<Locale::Messages>'s ngettext function or passthrough fallback function.
 100
 101=head2 N__($)
 102
 103No-operation that only returns its argument. Use this if you want xgettext to
 104extract the text to the pot template but do not want to trigger retrival of the
 105translation at run time.
 106
 107=head1 AUTHOR
 108
 109E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
 110
 111=head1 COPYRIGHT
 112
 113Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
 114
 115=cut