]>
Commit | Line | Data |
---|---|---|
5e9637c6 | 1 | package Git::I18N; |
d13a73e3 | 2 | use 5.008001; |
5e9637c6 | 3 | use strict; |
5338ed2b | 4 | use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : (); |
3e9c6a08 ÆAB |
5 | BEGIN { |
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 | 16 | our @EXPORT = qw(__ __n N__); |
5e9637c6 ÆAB |
17 | our @EXPORT_OK = @EXPORT; |
18 | ||
256c2dc4 ÆAB |
19 | # See Git::LoadCPAN's NO_PERL_CPAN_FALLBACKS_STR for a description of |
20 | # this "'@@' [...] '@@'" pattern. | |
21 | use constant NO_GETTEXT_STR => '@@' . 'NO_GETTEXT' . '@@'; | |
22 | use constant NO_GETTEXT => ( | |
23 | q[@@NO_GETTEXT@@] ne '' | |
24 | and | |
25 | q[@@NO_GETTEXT@@] ne NO_GETTEXT_STR | |
26 | ); | |
27 | ||
5e9637c6 ÆAB |
28 | sub __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 | ||
47 | BEGIN | |
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 | ||
71 | 1; | |
72 | ||
73 | __END__ | |
74 | ||
75 | =head1 NAME | |
76 | ||
77 | Git::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 | ||
92 | Git's internal Perl interface to gettext via L<Locale::Messages>. If | |
93 | L<Locale::Messages> can't be loaded (it's not a core module) we | |
94 | provide stub passthrough fallbacks. | |
95 | ||
96 | This is a distilled interface to gettext, see C<info '(gettext)Perl'> | |
97 | for the full interface. This module implements only a small part of | |
98 | it. | |
99 | ||
100 | =head1 FUNCTIONS | |
101 | ||
102 | =head2 __($) | |
103 | ||
104 | L<Locale::Messages>'s gettext function if all goes well, otherwise our | |
105 | passthrough fallback function. | |
106 | ||
c4a85c3b VA |
107 | =head2 __n($$$) |
108 | ||
109 | L<Locale::Messages>'s ngettext function or passthrough fallback function. | |
110 | ||
0539d5e6 VA |
111 | =head2 N__($) |
112 | ||
113 | No-operation that only returns its argument. Use this if you want xgettext to | |
114 | extract the text to the pot template but do not want to trigger retrival of the | |
115 | translation at run time. | |
116 | ||
5e9637c6 ÆAB |
117 | =head1 AUTHOR |
118 | ||
119 | E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com> | |
120 | ||
121 | =head1 COPYRIGHT | |
122 | ||
123 | Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com> | |
124 | ||
125 | =cut |