Redundant/mis-use of _(x) gettext macro?

Started by Peter Smith14 days ago7 messageshackers
Jump to latest
#1Peter Smith
smithpb2250@gmail.com

Hi.

As originally reported [1]/messages/by-id/CAHut+PtVaOYVP1R0TOoNh5G9CUBurrP=6i7fJCdfWEZiqVCRvw@mail.gmail.com in the EXCEPT (TABLE ...) thread, I felt
the _() gettext macro is mis-used when it contains nothing but a
quoted format string.

AFAIK the purpose of using gettext (e.g. the "_(x)" macro) is for
marking the string for i18n translation. But there's nothing even to
translate here.

Only 2 examples were found like this. Granted, this is probably not
very harmful, but IMO it's better to patch the mis-use to prevent it
from propagating.

PSA the patch for more details.

======
[1]: /messages/by-id/CAHut+PtVaOYVP1R0TOoNh5G9CUBurrP=6i7fJCdfWEZiqVCRvw@mail.gmail.com

Kind Regards,
Peter Smith.
Fujitsu Australia

Attachments:

v1-0001-misuse-of-gettext-macro.patchapplication/octet-stream; name=v1-0001-misuse-of-gettext-macro.patchDownload+2-3
#2Chao Li
li.evan.chao@gmail.com
In reply to: Peter Smith (#1)
Re: Redundant/mis-use of _(x) gettext macro?

On Apr 1, 2026, at 11:48, Peter Smith <smithpb2250@gmail.com> wrote:

Hi.

As originally reported [1] in the EXCEPT (TABLE ...) thread, I felt
the _() gettext macro is mis-used when it contains nothing but a
quoted format string.

AFAIK the purpose of using gettext (e.g. the "_(x)" macro) is for
marking the string for i18n translation. But there's nothing even to
translate here.

Indeed.

Only 2 examples were found like this. Granted, this is probably not
very harmful, but IMO it's better to patch the mis-use to prevent it
from propagating.

+1

PSA the patch for more details.

======
[1] /messages/by-id/CAHut+PtVaOYVP1R0TOoNh5G9CUBurrP=6i7fJCdfWEZiqVCRvw@mail.gmail.com

Kind Regards,
Peter Smith.
Fujitsu Australia
<v1-0001-misuse-of-gettext-macro.patch>

LGTM.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

#3Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Smith (#1)
Re: Redundant/mis-use of _(x) gettext macro?

On 2026-Apr-01, Peter Smith wrote:

Hi.

As originally reported [1] in the EXCEPT (TABLE ...) thread, I felt
the _() gettext macro is mis-used when it contains nothing but a
quoted format string.

No, you feel wrong -- this is necessary so that the translator has
control over the quoting style of a list of items. Not all translations
use double quoting. Some examples from different language files:

msgstr "unbekannte Komprimierungsoption: »%s«"
msgstr "opción de compresión no reconocida: «%s»"
msgstr "option de compression inconnue : « %s »"
msgstr "tidak dapat menentukan encoding untuk lokal « %s » : codesetnya adalah « %s »"

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"In fact, the basic problem with Perl 5's subroutines is that they're not
crufty enough, so the cruft leaks out into user-defined code instead, by
the Conservation of Cruft Principle." (Larry Wall, Apocalypse 6)

#4Peter Smith
smithpb2250@gmail.com
In reply to: Alvaro Herrera (#3)
Re: Redundant/mis-use of _(x) gettext macro?

On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2026-Apr-01, Peter Smith wrote:

Hi.

As originally reported [1] in the EXCEPT (TABLE ...) thread, I felt
the _() gettext macro is mis-used when it contains nothing but a
quoted format string.

No, you feel wrong -- this is necessary so that the translator has
control over the quoting style of a list of items. Not all translations
use double quoting. Some examples from different language files:

msgstr "unbekannte Komprimierungsoption: »%s«"
msgstr "opción de compresión no reconocida: «%s»"
msgstr "option de compression inconnue : « %s »"
msgstr "tidak dapat menentukan encoding untuk lokal « %s » : codesetnya adalah « %s »"

OK. Thanks for your explanation.

======
Kind Regards,
Peter Smith.
Fujitsu Australia

#5Chao Li
li.evan.chao@gmail.com
In reply to: Peter Smith (#4)
Re: Redundant/mis-use of _(x) gettext macro?

On Apr 2, 2026, at 10:55, Peter Smith <smithpb2250@gmail.com> wrote:

On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2026-Apr-01, Peter Smith wrote:

Hi.

As originally reported [1] in the EXCEPT (TABLE ...) thread, I felt
the _() gettext macro is mis-used when it contains nothing but a
quoted format string.

No, you feel wrong -- this is necessary so that the translator has
control over the quoting style of a list of items. Not all translations
use double quoting. Some examples from different language files:

msgstr "unbekannte Komprimierungsoption: »%s«"
msgstr "opción de compresión no reconocida: «%s»"
msgstr "option de compression inconnue : « %s »"
msgstr "tidak dapat menentukan encoding untuk lokal « %s » : codesetnya adalah « %s »"

OK. Thanks for your explanation.

Yep, good to learn. Noted.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Chao Li (#5)
Re: Redundant/mis-use of _(x) gettext macro?

Chao Li <li.evan.chao@gmail.com> writes:

On Apr 2, 2026, at 10:55, Peter Smith <smithpb2250@gmail.com> wrote:

On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

No, you feel wrong -- this is necessary so that the translator has
control over the quoting style of a list of items. Not all translations
use double quoting. Some examples from different language files:

Yep, good to learn. Noted.

This and related message style matters are covered in our docs, in

https://www.postgresql.org/docs/devel/error-style-guide.html

regards, tom lane

#7Peter Smith
smithpb2250@gmail.com
In reply to: Alvaro Herrera (#3)
Re: Redundant/mis-use of _(x) gettext macro?

On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2026-Apr-01, Peter Smith wrote:

Hi.

As originally reported [1] in the EXCEPT (TABLE ...) thread, I felt
the _() gettext macro is mis-used when it contains nothing but a
quoted format string.

No, you feel wrong -- this is necessary so that the translator has
control over the quoting style of a list of items. Not all translations
use double quoting. Some examples from different language files:

msgstr "unbekannte Komprimierungsoption: »%s«"
msgstr "opción de compresión no reconocida: «%s»"
msgstr "option de compression inconnue : « %s »"
msgstr "tidak dapat menentukan encoding untuk lokal « %s » : codesetnya adalah « %s »"

The explanation [1]/messages/by-id/202604011144.jeo56tazdx6z@alvherre.pgsql that even the comma separators and the quotes are
translatable parts of the message reminded me to revisit the
`GetPublicationsStr` function.

This function builds a comma-separated list of publication names.

It is called in 2 scenarios:
1. to construct a pubname list to be included in some SQL (here,
parameter quote_literal=true)
2. to construct a pubname list to be included in some error message
(here, parameter quote_literal=false).

In hindsight, it looks like this function has been broken since it was
originally implemented 4 yrs ago (8f2e2bb), because it does not allow
translation of commas and quotes when the result is being used for
error messages.

PSA a patch to fix that.

======
[1]: /messages/by-id/202604011144.jeo56tazdx6z@alvherre.pgsql

Kind Regards,
Peter Smith.
Fujitsu Australia

Attachments:

v1-0001-GetPublicationsStr-i18n-support.patchapplication/octet-stream; name=v1-0001-GetPublicationsStr-i18n-support.patchDownload+11-9