i18n: add--interactive: mark plural strings
[git] / perl / Git / I18N.pm
1 package Git::I18N;
2 use 5.008;
3 use strict;
4 use warnings;
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 }
15
16 our @EXPORT = qw(__ __n);
17 our @EXPORT_OK = @EXPORT;
18
19 sub __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
37 BEGIN
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
59 1;
60
61 __END__
62
63 =head1 NAME
64
65 Git::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
79 Git's internal Perl interface to gettext via L<Locale::Messages>. If
80 L<Locale::Messages> can't be loaded (it's not a core module) we
81 provide stub passthrough fallbacks.
82
83 This is a distilled interface to gettext, see C<info '(gettext)Perl'>
84 for the full interface. This module implements only a small part of
85 it.
86
87 =head1 FUNCTIONS
88
89 =head2 __($)
90
91 L<Locale::Messages>'s gettext function if all goes well, otherwise our
92 passthrough fallback function.
93
94 =head2 __n($$$)
95
96 L<Locale::Messages>'s ngettext function or passthrough fallback function.
97
98 =head1 AUTHOR
99
100 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
101
102 =head1 COPYRIGHT
103
104 Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
105
106 =cut