1package Git::I18N; 2use5.008; 3use strict; 4use warnings; 5BEGIN{ 6require Exporter; 7if($] <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 16our@EXPORT=qw(__ __n N__); 17our@EXPORT_OK=@EXPORT; 18 19sub __bootstrap_locale_messages { 20our$TEXTDOMAIN='git'; 21our$TEXTDOMAINDIR=$ENV{GIT_TEXTDOMAINDIR} ||'++LOCALEDIR++'; 22 23require POSIX; 24 POSIX->import(qw(setlocale)); 25# Non-core prerequisite module 26require 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 34return; 35} 36 37BEGIN 38{ 39# Used by our test script to see if it should test fallbacks or 40# not. 41our$__HAS_LIBRARY=1; 42 43local$@; 44eval{ 45 __bootstrap_locale_messages(); 46*__ = \&Locale::Messages::gettext; 47*__n = \&Locale::Messages::ngettext; 481; 49}ordo{ 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 58sub N__($) {returnshift; } 59} 60 611; 62 63__END__ 64 65=head1 NAME 66 67Git::I18N - Perl interface to Git's Gettext localizations 68 69=head1 SYNOPSIS 70 71 use Git::I18N; 72 73 print __("Welcome to Git!\n"); 74 75 printf __("The following error occurred: %s\n"), $error; 76 77 printf __n("commited %d file\n", "commited %d files\n", $files), $files; 78 79 80=head1 DESCRIPTION 81 82Git's internal Perl interface to gettext via L<Locale::Messages>. If 83L<Locale::Messages> can't be loaded (it's not a core module) we 84provide stub passthrough fallbacks. 85 86This is a distilled interface to gettext, see C<info '(gettext)Perl'> 87for the full interface. This module implements only a small part of 88it. 89 90=head1 FUNCTIONS 91 92=head2 __($) 93 94L<Locale::Messages>'s gettext function if all goes well, otherwise our 95passthrough fallback function. 96 97=head2 __n($$$) 98 99L<Locale::Messages>'s ngettext function or passthrough fallback function. 100 101=head2 N__($) 102 103No-operation that only returns its argument. Use this if you want xgettext to 104extract the text to the pot template but do not want to trigger retrival of the 105translation at run time. 106 107=head1 AUTHOR 108 109E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com> 110 111=head1 COPYRIGHT 112 113Copyright 2010 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com> 114 115=cut