]> git.ipfire.org Git - thirdparty/git.git/blame - perl/Git/I18N.pm
Merge branch 'la/strvec-comment-fix' into maint-2.43
[thirdparty/git.git] / perl / Git / I18N.pm
CommitLineData
5e9637c6 1package Git::I18N;
d13a73e3 2use 5.008001;
5e9637c6 3use strict;
5338ed2b 4use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : ();
3e9c6a08
ÆAB
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}
5e9637c6 15
0539d5e6 16our @EXPORT = qw(__ __n N__);
5e9637c6
ÆAB
17our @EXPORT_OK = @EXPORT;
18
256c2dc4
ÆAB
19# See Git::LoadCPAN's NO_PERL_CPAN_FALLBACKS_STR for a description of
20# this "'@@' [...] '@@'" pattern.
21use constant NO_GETTEXT_STR => '@@' . 'NO_GETTEXT' . '@@';
22use constant NO_GETTEXT => (
23 q[@@NO_GETTEXT@@] ne ''
24 and
25 q[@@NO_GETTEXT@@] ne NO_GETTEXT_STR
26);
27
5e9637c6
ÆAB
28sub __bootstrap_locale_messages {
29 our $TEXTDOMAIN = 'git';
07d90ead 30 our $TEXTDOMAINDIR ||= $ENV{GIT_TEXTDOMAINDIR} || '@@LOCALEDIR@@';
256c2dc4 31 die "NO_GETTEXT=" . NO_GETTEXT_STR if NO_GETTEXT;
5e9637c6
ÆAB
32
33 require POSIX;
34 POSIX->import(qw(setlocale));
35 # Non-core prerequisite module
36 require Locale::Messages;
37 Locale::Messages->import(qw(:locale_h :libintl_h));
38
39 setlocale(LC_MESSAGES(), '');
40 setlocale(LC_CTYPE(), '');
41 textdomain($TEXTDOMAIN);
42 bindtextdomain($TEXTDOMAIN => $TEXTDOMAINDIR);
43
44 return;
45}
46
47BEGIN
48{
49 # Used by our test script to see if it should test fallbacks or
50 # not.
51 our $__HAS_LIBRARY = 1;
52
53 local $@;
54 eval {
55 __bootstrap_locale_messages();
56 *__ = \&Locale::Messages::gettext;
c4a85c3b 57 *__n = \&Locale::Messages::ngettext;
5e9637c6
ÆAB
58 1;
59 } or do {
60 # Tell test.pl that we couldn't load the gettext library.
61 $Git::I18N::__HAS_LIBRARY = 0;
62
63 # Just a fall-through no-op
64 *__ = sub ($) { $_[0] };
c4a85c3b 65 *__n = sub ($$$) { $_[2] == 1 ? $_[0] : $_[1] };
5e9637c6 66 };
0539d5e6
VA
67
68 sub N__($) { return shift; }
5e9637c6
ÆAB
69}
70
711;
72
73__END__
74
75=head1 NAME
76
77Git::I18N - Perl interface to Git's Gettext localizations
78
79=head1 SYNOPSIS
80
81 use Git::I18N;
82
83 print __("Welcome to Git!\n");
84
41ccfdd9 85 printf __("The following error occurred: %s\n"), $error;
5e9637c6 86
64127575 87 printf __n("committed %d file\n", "committed %d files\n", $files), $files;
c4a85c3b 88
0539d5e6 89
5e9637c6
ÆAB
90=head1 DESCRIPTION
91
92Git's internal Perl interface to gettext via L<Locale::Messages>. If
93L<Locale::Messages> can't be loaded (it's not a core module) we
94provide stub passthrough fallbacks.
95
96This is a distilled interface to gettext, see C<info '(gettext)Perl'>
97for the full interface. This module implements only a small part of
98it.
99
100=head1 FUNCTIONS
101
102=head2 __($)
103
104L<Locale::Messages>'s gettext function if all goes well, otherwise our
105passthrough fallback function.
106
c4a85c3b
VA
107=head2 __n($$$)
108
109L<Locale::Messages>'s ngettext function or passthrough fallback function.
110
0539d5e6
VA
111=head2 N__($)
112
113No-operation that only returns its argument. Use this if you want xgettext to
114extract the text to the pot template but do not want to trigger retrival of the
115translation at run time.
116
5e9637c6
ÆAB
117=head1 AUTHOR
118
119E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
120
121=head1 COPYRIGHT
122
123Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
124
125=cut