Here's version 4 of the patch series begun by Jeff Epler to make Git optionally translatable with GNU gettext. It's like the version 4 I submitted an ~hour ago, sans the annoying errors I made and lots of tests: Changes from v3 to v4: * Fix typos and removal of GIT_TEXTDOMAINDIR that I rewrote out with some rebase mistakes. * Add meaningful testing. The C, Shell and Perl wrappers are now tested as part of a new t/t0200-gettext.sh test file. Put under the t/t0* namespace because it's a core feature, and using a new t02 prefix because there'll probably be a lot of Gettext tests down the line. Changes from v2 to v3: * Squashed some infrastructure patches into the initial commit. * Added basic sanity testing for the Gettext support * .mo files aren't installed on `make install` time if NO_GETTEXT was specified during the build. In C gettext support isn't compiled in. But this happens implicitly in Shell/Perl because the locale files won't be there on the system. * NO_GETTEXT is now set correctly depending on whether libintl.h exists when autoconf is used to build Git. Whether this is the best approach to gettext detection with autoconf is being discussed in the "[PATCH/RCF] autoconf: Check if <libintl.h> exists and set NO_GETTEX" thread. * The localedir is now passed to the Perl code via Makefile trickery. It's no longer hardcoded to /usr/local/share/locale * Add `--keyword=` to all xgettext invocations. This way we make sure that only our gettext functions are extracted, not the defaults xgettext. * Git::Gettext is now called Git::I18N * Remove LICENSE from I18N.pm. It was a boilerplate that shouldn't have been there. * Use qw() not qw< > in Perl code. * Changed the interface to Git::I18N. Now it exports all its functions by default. If something's using the module it's going to want to import everything anyway. This makes the issue of '@{ $EXPORT_TAGS{'all'} }' being ugly syntax moot since it isn't used anymore. Users can still import selectively by specifying arguments to import(). * The GIT_TEXTDOMAINDIR environment variable can be set to override where the C/Perl/Shell locale files are found. This is intended to be set by the test suite. * The boolean test for whether gettext.sh was successfully loaded was inverted (oops!) Things that haven't changed: Jakub pointed out some things that I might want to change that I didn't yet. Mostly because I didn't have time yet. * Git::I18N still uses Locale::Messages, not Locale::TextDomain. I'm still not convinced that the low-level Locale::Messages interface isn't a better fit for us. But I didn't get Locale::TextDomain working at all today so I'm still using Locale::Messages. * Perl still uses gettext($), not __($) (see above). * use Exporter 'import': Subclassing Exporter instead since we apparently need Perl 5.6 compatibility. Jeff Epler (1): Add infrastructure for translating Git with gettext Ævar Arnfjörð Bjarmason (6): gettext: Add a Gettext interface for shell scripts gettext: Add a Gettext interface for Perl Makefile: Don't install Gettext .mo files if NO_GETTEXT Makefile: Override --keyword= for all languages gettext: Sanity tests for Git's Gettext support gettext: Add a skeleton po/is.po .gitignore | 1 + Makefile | 43 ++++++++- config.mak.in | 1 + configure.ac | 6 + gettext.c | 25 +++++ gettext.h | 13 +++ git-pull.sh | 15 ++-- git-send-email.perl | 3 +- git-sh-setup.sh | 38 +++++++ git.c | 3 + perl/Git/I18N.pm | 73 +++++++++++++ perl/Makefile | 3 +- perl/Makefile.PL | 14 +++- po/.gitignore | 1 + po/is.po | 282 +++++++++++++++++++++++++++++++++++++++++++++++++++ t/t0200-gettext.sh | 73 +++++++++++++ wt-status.c | 129 ++++++++++++------------ 17 files changed, 647 insertions(+), 76 deletions(-) create mode 100644 gettext.c create mode 100644 gettext.h create mode 100644 perl/Git/I18N.pm create mode 100644 po/.gitignore create mode 100644 po/is.po create mode 100755 t/t0200-gettext.sh -- 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