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