Merge branch 'ab/enable-i18n'
* ab/enable-i18n: i18n: add infrastructure for translating Git with gettext Conflicts: Makefile
This commit is contained in:
89
perl/Git/I18N.pm
Normal file
89
perl/Git/I18N.pm
Normal file
@ -0,0 +1,89 @@
|
||||
package Git::I18N;
|
||||
use 5.008;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Exporter 'import';
|
||||
|
||||
our @EXPORT = qw(__);
|
||||
our @EXPORT_OK = @EXPORT;
|
||||
|
||||
sub __bootstrap_locale_messages {
|
||||
our $TEXTDOMAIN = 'git';
|
||||
our $TEXTDOMAINDIR = $ENV{GIT_TEXTDOMAINDIR} || '++LOCALEDIR++';
|
||||
|
||||
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;
|
||||
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] };
|
||||
};
|
||||
}
|
||||
|
||||
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 occured: %s\n"), $error;
|
||||
|
||||
=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.
|
||||
|
||||
=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
|
@ -5,6 +5,7 @@ makfile:=perl.mak
|
||||
|
||||
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
|
||||
prefix_SQ = $(subst ','\'',$(prefix))
|
||||
localedir_SQ = $(subst ','\'',$(localedir))
|
||||
|
||||
ifndef V
|
||||
QUIET = @
|
||||
@ -38,7 +39,7 @@ $(makfile): ../GIT-CFLAGS Makefile
|
||||
echo ' echo $(instdir_SQ)' >> $@
|
||||
else
|
||||
$(makfile): Makefile.PL ../GIT-CFLAGS
|
||||
$(PERL_PATH) $< PREFIX='$(prefix_SQ)' INSTALL_BASE=''
|
||||
$(PERL_PATH) $< PREFIX='$(prefix_SQ)' INSTALL_BASE='' --localedir='$(localedir_SQ)'
|
||||
endif
|
||||
|
||||
# this is just added comfort for calling make directly in perl dir
|
||||
|
@ -1,4 +1,12 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use ExtUtils::MakeMaker;
|
||||
use Getopt::Long;
|
||||
|
||||
# Sanity: die at first unknown option
|
||||
Getopt::Long::Configure qw/ pass_through /;
|
||||
|
||||
GetOptions("localedir=s" => \my $localedir);
|
||||
|
||||
sub MY::postamble {
|
||||
return <<'MAKE_FRAG';
|
||||
@ -16,7 +24,10 @@ endif
|
||||
MAKE_FRAG
|
||||
}
|
||||
|
||||
my %pm = ('Git.pm' => '$(INST_LIBDIR)/Git.pm');
|
||||
my %pm = (
|
||||
'Git.pm' => '$(INST_LIBDIR)/Git.pm',
|
||||
'Git/I18N.pm' => '$(INST_LIBDIR)/Git/I18N.pm',
|
||||
);
|
||||
|
||||
# We come with our own bundled Error.pm. It's not in the set of default
|
||||
# Perl modules so install it if it's not available on the system yet.
|
||||
@ -33,6 +44,7 @@ WriteMakefile(
|
||||
NAME => 'Git',
|
||||
VERSION_FROM => 'Git.pm',
|
||||
PM => \%pm,
|
||||
PM_FILTER => qq[\$(PERL) -pe "s<\\Q++LOCALEDIR++\\E><$localedir>"],
|
||||
MAKEFILE => 'perl.mak',
|
||||
INSTALLSITEMAN3DIR => '$(SITEPREFIX)/share/man/man3'
|
||||
);
|
||||
|
Reference in New Issue
Block a user