git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: i18n: git-submodule message does not appear in git.pot

From
Jiang Xin <worldhello.net@gmail.com>
Date
Jun 3, 2012, 08:05 UTC
Message-ID
<CANYiYbFrdNGpyTy3sVHPfm9R0bK-0S0Yh8BxxK4WkAbaaQRaNA@mail.gmail.com>
In-Reply-To
<4FC9FA97.7020908@lyx.org>
2012/6/2 Vincent van Ravesteijn <vfr@lyx.org>:
Show 8 quoted lines
> In commit b9b9c22f [1] the string "--cached cannot be used with --files" is
> translated using an extra "--" between "gettext" and the string. This does
> not work because in the current git.pot file there is now:
>
> #: git-submodule.sh:713
> msgid "--"
> msgstr ""
>
It's really a trouble.
> Removing this exta "--" fixes the problem for me (GNU gettext v0.18.1)
You can not remove the extra '--', or gettext report error:
    $ gettext "--cached cannot be used with --files"
    gettext: unrecognized option '--cached cannot be used with --files'
    Try `gettext --help' for more information.

My fix is call gettextln in here instead of gettext, and in the gettextln function, we pass a extra '--' option between gettext and the message id.

diff --git a/git-sh-i18n.sh b/git-sh-i18n.sh
index 6a27f..dbabf 100644
--- a/git-sh-i18n.sh
+++ b/git-sh-i18n.sh
@@ -49,7 +49,7 @@ gnu)
 gettext_without_eval_gettext)
 	# Solaris has a gettext(1) but no eval_gettext(1)
 	eval_gettext () {
-		gettext "$1" | (
+		gettext -- "$1" | (
 			export PATH $(git sh-i18n--envsubst --variables "$1");
 			git sh-i18n--envsubst "$1"
 		)
@@ -68,10 +68,20 @@ poison)
 	;;
 *)
 	gettext () {
+		# Bypass options, such as '--'.
+		while test $# -gt 1
+		do
+			shift
+		done
 		printf "%s" "$1"
 	}

 	eval_gettext () {
+		# Bypass options, such as '--'.
+		while test $# -gt 1
+		do
+			shift
+		done
 		printf "%s" "$1" | (
 			export PATH $(git sh-i18n--envsubst --variables "$1");
 			git sh-i18n--envsubst "$1"
@@ -82,7 +92,7 @@ esac

 # Git-specific wrapper functions
 gettextln () {
-	gettext "$1"
+	gettext -- "$1"
 	echo
 }

diff --git a/git-submodule.sh b/git-submodule.sh
index 5c61a..bb9f6 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -710,7 +710,7 @@ cmd_summary() {
 	if [ -n "$files" ]
 	then
 		test -n "$cached" &&
-		die "$(gettext -- "--cached cannot be used with --files")"
+		die "$(gettextln "--cached cannot be used with --files")"
 		diff_cmd=diff-files
 		head=
 	fi


>> [1] b9b9c22f; Aevar Arnfjord Bjarmason; Sat May 21 2011; i18n: git-submodule
> "cached cannot be used" message.

In commit b9b9c22f, Ævar described this problem clearly.

commit b9b9c22f6db3e3c089098ba04fbc885e2cb4f4dd
Author: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date:   Sat May 21 18:44:03 2011 +0000

    i18n: git-submodule "cached cannot be used" message

    Gettextize the "--cached cannot be used with --files" message. Since
    this message starts with "--" we have to pass "--" as the first
    argument. This works with both GNU gettext 0.18.1 (as expected), and
    the gettext(1) on Solaris 10.

    Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>


And I found another issue: since we have two extra gettext wrapper
gettextln and eval_gettextln, we should do somthing for xgettext in
Makefile, or messages marked by gettextln and eval_gettextln would
not extract to 'po/git.pot'.

diff --git a/Makefile b/Makefile
index 4592f..dc3fd 100644
--- a/Makefile
+++ b/Makefile
@@ -2333,7 +2333,8 @@ 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
+XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
+       --keyword=gettextln --keyword=eval_gettextln
 XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
 LOCALIZED_C := $(C_OBJ:o=c) $(LIB_H) $(XDIFF_H) $(VCSSVN_H) $(MISC_H)
 LOCALIZED_SH := $(SCRIPT_SH)
-- 
Jiang Xin
Previous: Vincent van RavesteijnNext: Andreas Schwab
Message 2 of 4 in “i18n: git-submodule message does not appear in git.pot”
  1. Vincent van RavesteijnJun 2, 2012
  2. Jiang XinJun 3, 2012
  3. Andreas SchwabJun 3, 2012
  4. Jiang XinJun 3, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.