256c2dc42c
Change the logic of the i18n functions I added in 5e9637c629
(i18n:
add infrastructure for translating Git with gettext, 2011-11-18) to
use pass-through functions when NO_GETTEXT is defined.
This speeds up the compilation time of commands that use this library
when NO_GETTEXT=Y is in effect. Loading it and POSIX.pm is around 20ms
on my machine, whereas it takes 2ms to just instantiate perl itself.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
126 lines
2.8 KiB
Perl
126 lines
2.8 KiB
Perl
package Git::I18N;
|
|
use 5.008;
|
|
use strict;
|
|
use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : ();
|
|
BEGIN {
|
|
require Exporter;
|
|
if ($] < 5.008003) {
|
|
*import = \&Exporter::import;
|
|
} else {
|
|
# Exporter 5.57 which supports this invocation was
|
|
# released with perl 5.8.3
|
|
Exporter->import('import');
|
|
}
|
|
}
|
|
|
|
our @EXPORT = qw(__ __n N__);
|
|
our @EXPORT_OK = @EXPORT;
|
|
|
|
# See Git::LoadCPAN's NO_PERL_CPAN_FALLBACKS_STR for a description of
|
|
# this "'@@' [...] '@@'" pattern.
|
|
use constant NO_GETTEXT_STR => '@@' . 'NO_GETTEXT' . '@@';
|
|
use constant NO_GETTEXT => (
|
|
q[@@NO_GETTEXT@@] ne ''
|
|
and
|
|
q[@@NO_GETTEXT@@] ne NO_GETTEXT_STR
|
|
);
|
|
|
|
sub __bootstrap_locale_messages {
|
|
our $TEXTDOMAIN = 'git';
|
|
our $TEXTDOMAINDIR ||= $ENV{GIT_TEXTDOMAINDIR} || '@@LOCALEDIR@@';
|
|
die "NO_GETTEXT=" . NO_GETTEXT_STR if NO_GETTEXT;
|
|
|
|
require POSIX;
|
|
POSIX->import(qw(setlocale));
|
|
# Non-core prerequisite module
|
|
require Locale::Messages;
|
|
Locale::Messages->import(qw(:locale_h :libintl_h));
|
|
|
|
setlocale(LC_MESSAGES(), '');
|
|
setlocale(LC_CTYPE(), '');
|
|
textdomain($TEXTDOMAIN);
|
|
bindtextdomain($TEXTDOMAIN => $TEXTDOMAINDIR);
|
|
|
|
return;
|
|
}
|
|
|
|
BEGIN
|
|
{
|
|
# Used by our test script to see if it should test fallbacks or
|
|
# not.
|
|
our $__HAS_LIBRARY = 1;
|
|
|
|
local $@;
|
|
eval {
|
|
__bootstrap_locale_messages();
|
|
*__ = \&Locale::Messages::gettext;
|
|
*__n = \&Locale::Messages::ngettext;
|
|
1;
|
|
} or do {
|
|
# Tell test.pl that we couldn't load the gettext library.
|
|
$Git::I18N::__HAS_LIBRARY = 0;
|
|
|
|
# Just a fall-through no-op
|
|
*__ = sub ($) { $_[0] };
|
|
*__n = sub ($$$) { $_[2] == 1 ? $_[0] : $_[1] };
|
|
};
|
|
|
|
sub N__($) { return shift; }
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
Git::I18N - Perl interface to Git's Gettext localizations
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
use Git::I18N;
|
|
|
|
print __("Welcome to Git!\n");
|
|
|
|
printf __("The following error occurred: %s\n"), $error;
|
|
|
|
printf __n("committed %d file\n", "committed %d files\n", $files), $files;
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Git's internal Perl interface to gettext via L<Locale::Messages>. If
|
|
L<Locale::Messages> can't be loaded (it's not a core module) we
|
|
provide stub passthrough fallbacks.
|
|
|
|
This is a distilled interface to gettext, see C<info '(gettext)Perl'>
|
|
for the full interface. This module implements only a small part of
|
|
it.
|
|
|
|
=head1 FUNCTIONS
|
|
|
|
=head2 __($)
|
|
|
|
L<Locale::Messages>'s gettext function if all goes well, otherwise our
|
|
passthrough fallback function.
|
|
|
|
=head2 __n($$$)
|
|
|
|
L<Locale::Messages>'s ngettext function or passthrough fallback function.
|
|
|
|
=head2 N__($)
|
|
|
|
No-operation that only returns its argument. Use this if you want xgettext to
|
|
extract the text to the pot template but do not want to trigger retrival of the
|
|
translation at run time.
|
|
|
|
=head1 AUTHOR
|
|
|
|
E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
|
|
|
|
=cut
|