diff options
Diffstat (limited to 'git-sh-i18n.sh')
-rw-r--r-- | git-sh-i18n.sh | 81 |
1 files changed, 72 insertions, 9 deletions
diff --git a/git-sh-i18n.sh b/git-sh-i18n.sh index 32ca59de82..6a27f68136 100644 --- a/git-sh-i18n.sh +++ b/git-sh-i18n.sh @@ -2,22 +2,62 @@ # # 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. +# This is Git's interface to gettext.sh. See po/README for usage +# instructions. -if test -z "$GIT_GETTEXT_POISON" +# Export the TEXTDOMAIN* data that we need for Git +TEXTDOMAIN=git +export TEXTDOMAIN +if test -z "$GIT_TEXTDOMAINDIR" then - gettext () { - printf "%s" "$1" - } + TEXTDOMAINDIR="@@LOCALEDIR@@" +else + TEXTDOMAINDIR="$GIT_TEXTDOMAINDIR" +fi +export TEXTDOMAINDIR +# First decide what scheme to use... +GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough +if test -n "@@USE_GETTEXT_SCHEME@@" +then + GIT_INTERNAL_GETTEXT_SH_SCHEME="@@USE_GETTEXT_SCHEME@@" +elif test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" +then + : no probing necessary +elif test -n "$GIT_GETTEXT_POISON" +then + GIT_INTERNAL_GETTEXT_SH_SCHEME=poison +elif type gettext.sh >/dev/null 2>&1 +then + # GNU libintl's gettext.sh + GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu +elif test "$(gettext -h 2>&1)" = "-h" +then + # gettext binary exists but no gettext.sh. likely to be a gettext + # binary on a Solaris or something that is not GNU libintl and + # lack eval_gettext. + GIT_INTERNAL_GETTEXT_SH_SCHEME=gettext_without_eval_gettext +fi +export GIT_INTERNAL_GETTEXT_SH_SCHEME + +# ... and then follow that decision. +case "$GIT_INTERNAL_GETTEXT_SH_SCHEME" in +gnu) + # Use libintl's gettext.sh, or fall back to English if we can't. + . gettext.sh + ;; +gettext_without_eval_gettext) + # Solaris has a gettext(1) but no eval_gettext(1) eval_gettext () { - printf "%s" "$1" | ( + gettext "$1" | ( export PATH $(git sh-i18n--envsubst --variables "$1"); git sh-i18n--envsubst "$1" ) } -else + ;; +poison) + # Emit garbage so that tests that incorrectly rely on translatable + # strings will fail. gettext () { printf "%s" "# GETTEXT POISON #" } @@ -25,5 +65,28 @@ else eval_gettext () { printf "%s" "# GETTEXT POISON #" } -fi + ;; +*) + gettext () { + printf "%s" "$1" + } + + eval_gettext () { + printf "%s" "$1" | ( + export PATH $(git sh-i18n--envsubst --variables "$1"); + git sh-i18n--envsubst "$1" + ) + } + ;; +esac + +# Git-specific wrapper functions +gettextln () { + gettext "$1" + echo +} +eval_gettextln () { + eval_gettext "$1" + echo +} |