Make Git's gettext messages available to Perl programs through Locale::Messages. Gracefully fall back to English on systems that don't contain the module. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> --- Makefile | 4 ++- git-send-email.perl | 3 +- perl/Git/Gettext.pm | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ perl/Makefile.PL | 5 ++- 4 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 perl/Git/Gettext.pm diff --git a/Makefile b/Makefile index dce2faa..2101713 100644 --- a/Makefile +++ b/Makefile @@ -1884,7 +1884,9 @@ cscope: $(FIND) . -name '*.[hcS]' -print | xargs cscope -b pot: - $(XGETTEXT) -k_ -o po/git.pot $(C_OBJ:o=c) $(SCRIPT_SH) + $(XGETTEXT) --keyword=_ --output=po/git.pot --language=C $(C_OBJ:o=c) + $(XGETTEXT) --join-existing --output=po/git.pot --language=Shell $(SCRIPT_SH) + $(XGETTEXT) --join-existing --output=po/git.pot --language=Perl $(SCRIPT_PERL) POFILES := $(wildcard po/*.po) MOFILES := $(patsubst po/%.po,share/locale/%/LC_MESSAGES/git.mo,$(POFILES)) diff --git a/git-send-email.perl b/git-send-email.perl index 111c981..a36718e 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -26,6 +26,7 @@ use Term::ANSIColor; use File::Temp qw/ tempdir tempfile /; use Error qw(:try); use Git; +use Git::Gettext qw< :all >; Getopt::Long::Configure qw/ pass_through /; @@ -674,7 +675,7 @@ if (!defined $sender) { $sender = $repoauthor || $repocommitter || ''; $sender = ask("Who should the emails appear to be from? [$sender] ", default => $sender); - print "Emails will be sent from: ", $sender, "\n"; + printf gettext("Emails will be sent from: %s\n"), $sender; $prompting++; } diff --git a/perl/Git/Gettext.pm b/perl/Git/Gettext.pm new file mode 100644 index 0000000..f434783 --- /dev/null +++ b/perl/Git/Gettext.pm @@ -0,0 +1,83 @@ +package Git::Gettext; +use strict; +use warnings; +use Exporter; +use base 'Exporter'; + +our $VERSION = '0.01'; + +our @EXPORT; +our @EXPORT_OK = qw< gettext >; +our %EXPORT_TAGS; +@{ $EXPORT_TAGS{'all'} } = @EXPORT_OK; + +sub __bootstrap_locale_messages { + our $TEXTDOMAIN = 'git'; + + # TODO: How do I make the sed replacements in the top level + # Makefile reach me here? + #our $TEXTDOMAINDIR = q|@@LOCALEDIR@@|; + our $TEXTDOMAINDIR = q</usr/local/share/locale>; + + 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 +{ + local ($@, $!); + eval { __bootstrap_locale_messages() }; + if ($@) { + # Oh noes, no Locale::Messages here + *gettext = sub ($) { $_[0] }; + } +} + +1; + +__END__ + +=head1 NAME + +Git::Gettext - Perl interface to Git's Gettext localizations + +=head1 DESCRIPTION + +Git's internal 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. + +=head1 FUNCTIONS + +=head2 gettext($) + +L<Locale::Messages>'s gettext function if all goes well, otherwise our +passthrough fallback function. + +=head1 EXPORTS + +Exports are done via L<Exporter>. Invididual functions can be +exporter, or all of them via the C<:all> export tag. + +=head1 AUTHOR + +E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@xxxxxxxxx> + +=head1 LICENSE AND COPYRIGHT + +Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@xxxxxxxxx> + +This program is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/perl/Makefile.PL b/perl/Makefile.PL index 0b9deca..702ec7c 100644 --- a/perl/Makefile.PL +++ b/perl/Makefile.PL @@ -16,7 +16,10 @@ endif MAKE_FRAG } -my %pm = ('Git.pm' => '$(INST_LIBDIR)/Git.pm'); +my %pm = ( + 'Git.pm' => '$(INST_LIBDIR)/Git.pm', + 'Git/Gettext.pm' => '$(INST_LIBDIR)/Git/Gettext.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. -- 1.7.1.248.gcd6d1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html