Re: To [email protected] 2011-06-17 <[email protected]> > Unfortunately that doesn't help in this case, as the bad string isn't > tagged as "#, c-format", but still gets used as such. This seems to be > the case for many errhint() strings. Maybe xgettext should be taught > to treat all errhint() et al arguments as c-strings.
Here's a patch to implement that, with backend/nls.mk updated.
msgfmt -c is already available in the "maintainer-check-po" target.
I'd assume this was called at least once during the release process.
diff --git a/src/backend/nls.mk b/src/backend/nls.mk
index 1894569..3c3f8ed 100644
*** a/src/backend/nls.mk
--- b/src/backend/nls.mk
*************** GETTEXT_TRIGGERS:= _ errmsg errmsg_plura
*** 6,11 ****
--- 6,15 ----
errdetail_plural:1,2 errhint errcontext \
GUC_check_errmsg GUC_check_errdetail GUC_check_errhint \
write_stderr yyerror parser_yyerror
+ GETTEXT_FLAGS := errmsg:1:c-format errmsg_plural:1:c-format \
+ errmsg_plural:2:c-format errhint:1:c-format errcontext:1:c-format \
+ GUC_check_errmsg:1:c-format GUC_check_errdetail:1:c-format \
+ GUC_check_errhint:1:c-format write_stderr:1:c-format
gettext-files: distprep
find $(srcdir)/ $(srcdir)/../port/ -name '*.c' -print >$@
diff --git a/src/nls-global.mk b/src/nls-global.mk
index 32b3c0f..3aa598f 100644
*** a/src/nls-global.mk
--- b/src/nls-global.mk
***************
*** 12,17 ****
--- 12,20 ----
# GETTEXT_FILES -- list of source files that contain message
strings
# GETTEXT_TRIGGERS -- (optional) list of functions that contain
# translatable strings
+ # GETTEXT_FLAGS -- (optional) list of gettext --flag arguments
to mark
+ # function arguments that contain C format strings
+ # (functions must be listed in TRIGGERS and FLAGS)
#
# That's all, the rest is done here, if --enable-nls was specified.
#
*************** all-po: $(MO_FILES)
*** 48,54 ****
ifeq ($(word 1,$(GETTEXT_FILES)),+)
po/$(CATALOG_NAME).pot: $(word 2, $(GETTEXT_FILES)) $(MAKEFILE_LIST)
ifdef XGETTEXT
! $(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS)) -f $<
else
@echo "You don't have 'xgettext'."; exit 1
endif
--- 51,57 ----
ifeq ($(word 1,$(GETTEXT_FILES)),+)
po/$(CATALOG_NAME).pot: $(word 2, $(GETTEXT_FILES)) $(MAKEFILE_LIST)
ifdef XGETTEXT
! $(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS))
$(addprefix --flag=, $(GETTEXT_FLAGS)) -f $<
else
@echo "You don't have 'xgettext'."; exit 1
endif
*************** po/$(CATALOG_NAME).pot: $(GETTEXT_FILES)
*** 57,63 ****
# Change to srcdir explicitly, don't rely on $^. That way we get
# consistent #: file references in the po files.
ifdef XGETTEXT
! $(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS))
$(GETTEXT_FILES)
else
@echo "You don't have 'xgettext'."; exit 1
endif
--- 60,66 ----
# Change to srcdir explicitly, don't rely on $^. That way we get
# consistent #: file references in the po files.
ifdef XGETTEXT
! $(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS))
$(addprefix --flag=, $(GETTEXT_FLAGS)) $(GETTEXT_FILES)
else
@echo "You don't have 'xgettext'."; exit 1
endif
Christoph
--
[email protected] | http://www.df7cb.de/
signature.asc
Description: Digital signature
