Skip to content

Commit

Permalink
Merge branch 'ab/i18n-scripts-basic'
Browse files Browse the repository at this point in the history
* ab/i18n-scripts-basic:
  Makefile: add xgettext target for *.sh files
  git-sh-i18n.sh: add GIT_GETTEXT_POISON support
  git-sh-i18n.sh: add no-op gettext() and eval_gettext() wrappers
  git-sh-i18n--envsubst: our own envsubst(1) for eval_gettext()
  • Loading branch information
Junio C Hamano committed May 23, 2011
2 parents be5ab43 + adc3b2b commit 91810ab
Show file tree
Hide file tree
Showing 7 changed files with 602 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,10 @@
/git-rm
/git-send-email
/git-send-pack
/git-sh-i18n
/git-sh-i18n--envsubst
/git-sh-setup
/git-sh-i18n
/git-shell
/git-shortlog
/git-show
Expand Down
26 changes: 26 additions & 0 deletions Documentation/git-sh-i18n--envsubst.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
git-sh-i18n--envsubst(1)
========================

NAME
----
git-sh-i18n--envsubst - Git's own envsubst(1) for i18n fallbacks

DESCRIPTION
-----------

This is not a command the end user would want to run. Ever.
This documentation is meant for people who are studying the
plumbing scripts and/or are writing new ones.

git-sh-i18n--envsubst is Git's stripped-down copy of the GNU
`envsubst(1)` program that comes with the GNU gettext package. It's
used internally by linkgit:git-sh-i18n[1] to interpolate the variables
passed to the the `eval_gettext` function.

No promises are made about the interface, or that this
program won't disappear without warning in the next version
of Git. Don't use it.

GIT
---
Part of the linkgit:git[1] suite
42 changes: 42 additions & 0 deletions Documentation/git-sh-i18n.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
git-sh-i18n(1)
==============

NAME
----
git-sh-i18n - Git's i18n setup code for shell scripts

SYNOPSIS
--------
'. "$(git --exec-path)/git-sh-i18n"'

DESCRIPTION
-----------

This is not a command the end user would want to run. Ever.
This documentation is meant for people who are studying the
Porcelain-ish scripts and/or are writing new ones.

The 'git sh-i18n scriptlet is designed to be sourced (using
`.`) by Git's porcelain programs implemented in shell
script. It provides wrappers for the GNU `gettext` and
`eval_gettext` functions accessible through the `gettext.sh`
script, and provides pass-through fallbacks on systems
without GNU gettext.

FUNCTIONS
---------

gettext::
Currently a dummy fall-through function implemented as a wrapper
around `printf(1)`. Will be replaced by a real gettext
implementation in a later version.

eval_gettext::
Currently a dummy fall-through function implemented as a wrapper
around `printf(1)` with variables expanded by the
linkgit:git-sh-i18n--envsubst[1] helper. Will be replaced by a
real gettext implementation in a later version.

GIT
---
Part of the linkgit:git[1] suite
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ SCRIPT_LIB += git-rebase--am
SCRIPT_LIB += git-rebase--interactive
SCRIPT_LIB += git-rebase--merge
SCRIPT_LIB += git-sh-setup
SCRIPT_LIB += git-sh-i18n

SCRIPT_PERL += git-add--interactive.perl
SCRIPT_PERL += git-difftool.perl
Expand Down Expand Up @@ -406,6 +407,7 @@ PROGRAM_OBJS += shell.o
PROGRAM_OBJS += show-index.o
PROGRAM_OBJS += upload-pack.o
PROGRAM_OBJS += http-backend.o
PROGRAM_OBJS += sh-i18n--envsubst.o

PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))

Expand Down Expand Up @@ -2037,10 +2039,14 @@ XGETTEXT_FLAGS = \
--from-code=UTF-8
XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
--keyword=_ --keyword=N_ --keyword="Q_:1,2"
XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell
LOCALIZED_C := $(C_OBJ:o=c)
LOCALIZED_SH := $(SCRIPT_SH)

po/git.pot: $(LOCALIZED_C)
$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C) && \
$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)
$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \
$(LOCALIZED_SH)
mv $@+ $@

pot: po/git.pot
Expand Down
29 changes: 29 additions & 0 deletions git-sh-i18n.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/sh
#
# Copyright (c) 2010 Ævar Arnfjörð Bjarmason
#
# This is a skeleton no-op implementation of gettext for Git. It'll be
# replaced by something that uses gettext.sh in a future patch series.

if test -z "$GIT_GETTEXT_POISON"
then
gettext () {
printf "%s" "$1"
}

eval_gettext () {
printf "%s" "$1" | (
export PATH $(git sh-i18n--envsubst --variables "$1");
git sh-i18n--envsubst "$1"
)
}
else
gettext () {
printf "%s" "# GETTEXT POISON #"
}

eval_gettext () {
printf "%s" "# GETTEXT POISON #"
}
fi

Loading

0 comments on commit 91810ab

Please sign in to comment.