public inbox for [email protected]
help / color / mirror / Atom feedRedundant/mis-use of _(x) gettext macro?
13+ messages / 5 participants
[nested] [flat]
* Redundant/mis-use of _(x) gettext macro?
@ 2026-04-01 03:48 Peter Smith <[email protected]>
2026-04-01 03:57 ` Re: Redundant/mis-use of _(x) gettext macro? Chao Li <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
0 siblings, 2 replies; 13+ messages in thread
From: Peter Smith @ 2026-04-01 03:48 UTC (permalink / raw)
To: PostgreSQL Hackers <[email protected]>
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.
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] https://www.postgresql.org/message-id/CAHut%2BPtVaOYVP1R0TOoNh5G9CUBurrP%3D6i7fJCdfWEZiqVCRvw%40mail...
Kind Regards,
Peter Smith.
Fujitsu Australia
Attachments:
[application/octet-stream] v1-0001-misuse-of-gettext-macro.patch (1.4K, 2-v1-0001-misuse-of-gettext-macro.patch)
download | inline diff:
From bd2a5ba9e7d65b4fc6e964048437ad776246b067 Mon Sep 17 00:00:00 2001
From: Peter Smith <[email protected]>
Date: Wed, 1 Apr 2026 14:40:18 +1100
Subject: [PATCH v1] misuse of gettext macro
---
src/backend/commands/tablecmds.c | 2 +-
src/backend/replication/logical/relation.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 4ee58feb10e..65229b7384e 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -20732,7 +20732,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd,
first = false;
- appendStringInfo(&pubnames, _("\"%s\""), pubname);
+ appendStringInfo(&pubnames, "\"%s\"", pubname);
}
ereport(ERROR,
diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c
index 0b1d80b5b0f..02e60ddf516 100644
--- a/src/backend/replication/logical/relation.c
+++ b/src/backend/replication/logical/relation.c
@@ -253,7 +253,7 @@ logicalrep_get_attrs_str(LogicalRepRelation *remoterel, Bitmapset *atts)
/* translator: This is a separator in a list of entity names. */
appendStringInfoString(&attsbuf, _(", "));
- appendStringInfo(&attsbuf, _("\"%s\""), remoterel->attnames[i]);
+ appendStringInfo(&attsbuf, "\"%s\"", remoterel->attnames[i]);
}
return attsbuf.data;
--
2.47.3
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
@ 2026-04-01 03:57 ` Chao Li <[email protected]>
1 sibling, 0 replies; 13+ messages in thread
From: Chao Li @ 2026-04-01 03:57 UTC (permalink / raw)
To: Peter Smith <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
> On Apr 1, 2026, at 11:48, Peter Smith <[email protected]> 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] https://www.postgresql.org/message-id/CAHut%2BPtVaOYVP1R0TOoNh5G9CUBurrP%3D6i7fJCdfWEZiqVCRvw%40mail...
>
> 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/
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
@ 2026-04-01 11:52 ` Álvaro Herrera <[email protected]>
2026-04-02 02:55 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-07 05:05 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
1 sibling, 2 replies; 13+ messages in thread
From: Álvaro Herrera @ 2026-04-01 11:52 UTC (permalink / raw)
To: Peter Smith <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
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)
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
@ 2026-04-02 02:55 ` Peter Smith <[email protected]>
2026-04-02 03:11 ` Re: Redundant/mis-use of _(x) gettext macro? Chao Li <[email protected]>
1 sibling, 1 reply; 13+ messages in thread
From: Peter Smith @ 2026-04-02 02:55 UTC (permalink / raw)
To: Álvaro Herrera <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <[email protected]> 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
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-02 02:55 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
@ 2026-04-02 03:11 ` Chao Li <[email protected]>
2026-04-02 03:18 ` Re: Redundant/mis-use of _(x) gettext macro? Tom Lane <[email protected]>
0 siblings, 1 reply; 13+ messages in thread
From: Chao Li @ 2026-04-02 03:11 UTC (permalink / raw)
To: Álvaro Herrera <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>; Peter Smith <[email protected]>
> On Apr 2, 2026, at 10:55, Peter Smith <[email protected]> wrote:
>
> On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <[email protected]> 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/
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-02 02:55 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-02 03:11 ` Re: Redundant/mis-use of _(x) gettext macro? Chao Li <[email protected]>
@ 2026-04-02 03:18 ` Tom Lane <[email protected]>
0 siblings, 0 replies; 13+ messages in thread
From: Tom Lane @ 2026-04-02 03:18 UTC (permalink / raw)
To: Chao Li <[email protected]>; +Cc: Álvaro Herrera <[email protected]>; PostgreSQL Hackers <[email protected]>; Peter Smith <[email protected]>
Chao Li <[email protected]> writes:
> On Apr 2, 2026, at 10:55, Peter Smith <[email protected]> wrote:
>> On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <[email protected]> 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
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
@ 2026-04-07 05:05 ` Peter Smith <[email protected]>
2026-04-23 07:24 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
1 sibling, 1 reply; 13+ messages in thread
From: Peter Smith @ 2026-04-07 05:05 UTC (permalink / raw)
To: Álvaro Herrera <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <[email protected]> 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] 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] https://www.postgresql.org/message-id/202604011144.jeo56tazdx6z%40alvherre.pgsql
Kind Regards,
Peter Smith.
Fujitsu Australia
Attachments:
[application/octet-stream] v1-0001-GetPublicationsStr-i18n-support.patch (1.2K, 2-v1-0001-GetPublicationsStr-i18n-support.patch)
download | inline diff:
From cd09ae7e4c18bfcb1b6522ec1aa16cfa3b5f502e Mon Sep 17 00:00:00 2001
From: Peter Smith <[email protected]>
Date: Tue, 7 Apr 2026 14:45:11 +1000
Subject: [PATCH v1] GetPublicationsStr i18n support
---
src/backend/catalog/pg_subscription.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c
index 5a733585490..8b31c487dba 100644
--- a/src/backend/catalog/pg_subscription.c
+++ b/src/backend/catalog/pg_subscription.c
@@ -54,19 +54,22 @@ GetPublicationsStr(List *publications, StringInfo dest, bool quote_literal)
{
char *pubname = strVal(lfirst(lc));
- if (first)
- first = false;
- else
- appendStringInfoString(dest, ", ");
-
if (quote_literal)
+ {
+ if (!first)
+ appendStringInfoString(dest, ", ");
+
appendStringInfoString(dest, quote_literal_cstr(pubname));
+ }
else
{
- appendStringInfoChar(dest, '"');
- appendStringInfoString(dest, pubname);
- appendStringInfoChar(dest, '"');
+ if (!first)
+ appendStringInfoString(dest, _(", "));
+
+ appendStringInfo(dest, _("\"%s\""), pubname);
}
+
+ first = false;
}
}
--
2.47.3
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-07 05:05 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
@ 2026-04-23 07:24 ` Peter Smith <[email protected]>
2026-04-23 09:25 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
0 siblings, 1 reply; 13+ messages in thread
From: Peter Smith @ 2026-04-23 07:24 UTC (permalink / raw)
To: Álvaro Herrera <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
On Tue, Apr 7, 2026 at 3:05 PM Peter Smith <[email protected]> wrote:
>
> On Wed, Apr 1, 2026 at 10:52 PM Álvaro Herrera <[email protected]> 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] 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] https://www.postgresql.org/message-id/202604011144.jeo56tazdx6z%40alvherre.pgsql
>
PSA patch v2.
v2 removes translation of the comma separator, due to the discussion
over at [1].
======
[1] https://www.postgresql.org/message-id/CAApHDvoFSu5zLFvx96aZ5wvL7tcB9aR2hBPCaMPs8D_f0Z7eSw%40mail.gma...
Kind Regards,
Peter Smith.
Fujitsu Australia
Attachments:
[application/octet-stream] v2-0001-GetPublicationsStr-i18n-support-for-quotes.patch (925B, 2-v2-0001-GetPublicationsStr-i18n-support-for-quotes.patch)
download | inline diff:
From f9a5034cd4d0f6eb930926de03e4e688c150eac3 Mon Sep 17 00:00:00 2001
From: Peter Smith <[email protected]>
Date: Thu, 23 Apr 2026 17:18:03 +1000
Subject: [PATCH v2] GetPublicationsStr i18n support for quotes
---
src/backend/catalog/pg_subscription.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c
index 5a733585490..a91d7a4a0ef 100644
--- a/src/backend/catalog/pg_subscription.c
+++ b/src/backend/catalog/pg_subscription.c
@@ -62,11 +62,7 @@ GetPublicationsStr(List *publications, StringInfo dest, bool quote_literal)
if (quote_literal)
appendStringInfoString(dest, quote_literal_cstr(pubname));
else
- {
- appendStringInfoChar(dest, '"');
- appendStringInfoString(dest, pubname);
- appendStringInfoChar(dest, '"');
- }
+ appendStringInfo(dest, _("\"%s\""), pubname);
}
}
--
2.47.3
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-07 05:05 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 07:24 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
@ 2026-04-23 09:25 ` Álvaro Herrera <[email protected]>
2026-04-24 03:10 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
0 siblings, 1 reply; 13+ messages in thread
From: Álvaro Herrera @ 2026-04-23 09:25 UTC (permalink / raw)
To: Peter Smith <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
On 2026-Apr-23, Peter Smith wrote:
> v2 removes translation of the comma separator, due to the discussion
> over at [1].
Hmm, at least Japanese uses a different character for commas, and
apparently French likes to add a space, so I think this is a bad move.
I think we could handle these things by including the comma together
with the literal in each element of the list being constructed, as in
the attached.
--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-07 05:05 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 07:24 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 09:25 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
@ 2026-04-24 03:10 ` Peter Smith <[email protected]>
2026-04-24 12:14 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
0 siblings, 1 reply; 13+ messages in thread
From: Peter Smith @ 2026-04-24 03:10 UTC (permalink / raw)
To: Álvaro Herrera <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
On Thu, Apr 23, 2026 at 7:25 PM Álvaro Herrera <[email protected]> wrote:
>
> On 2026-Apr-23, Peter Smith wrote:
>
> > v2 removes translation of the comma separator, due to the discussion
> > over at [1].
>
> Hmm, at least Japanese uses a different character for commas, and
> apparently French likes to add a space, so I think this is a bad move.
> I think we could handle these things by including the comma together
> with the literal in each element of the list being constructed, as in
> the attached.
>
OK. Including the comma within a larger translated string seems like a
better idea.
Since you now have the list `length`, I wondered why not simplify
further to use list_nth indexing? Then you can remove
`foreach_current_index` and `lc`.
PSA.
~~~~
Also, why did you choose to implement `last` versus `first` logic?
e.g. How about this?
------
GetPublicationsStr(List *publications, StringInfo dest, bool quote_literal)
{
ListCell *lc;
bool first = true;
Assert(publications != NIL);
foreach(lc, publications)
{
char *pubname = strVal(lfirst(lc));
if (quote_literal)
{
if (!first)
appendStringInfoString(dest, ", ");
appendStringInfoString(dest, quote_literal_cstr(pubname));
}
else
{
if (first)
appendStringInfo(dest, _("\"%s\""), pubname);
else
appendStringInfo(dest, _(", \"%s\""), pubname);
}
first = false;
}
}
------
======
Kind Regards,
Peter Smith.
Fujitsu Australia
Attachments:
[application/octet-stream] 0001-change-translation-markers-in-GetPublicationStr-PS.diff (1.5K, 2-0001-change-translation-markers-in-GetPublicationStr-PS.diff)
download | inline diff:
diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c
index 5a733585490..7749ec380de 100644
--- a/src/backend/catalog/pg_subscription.c
+++ b/src/backend/catalog/pg_subscription.c
@@ -41,31 +41,35 @@ static List *textarray_to_stringlist(ArrayType *textarray);
/*
* Add a comma-separated list of publication names to the 'dest' string.
+ *
+ * If quote_literal is true, the returned list can be used to construct an SQL
+ * command, thus no translation is applied. Otherwise, the string can be used
+ * to create a user-facing message, so translatable quote marks are added.
*/
void
GetPublicationsStr(List *publications, StringInfo dest, bool quote_literal)
{
- ListCell *lc;
- bool first = true;
+ int length = list_length(publications);
Assert(publications != NIL);
- foreach(lc, publications)
+ for (int i = 0; i < length; i++)
{
- char *pubname = strVal(lfirst(lc));
-
- if (first)
- first = false;
- else
- appendStringInfoString(dest, ", ");
+ char *pubname = strVal(list_nth(publications, i));
+ bool last = i >= length - 1;
if (quote_literal)
+ {
appendStringInfoString(dest, quote_literal_cstr(pubname));
+ if (!last)
+ appendStringInfoString(dest, ", ");
+ }
else
{
- appendStringInfoChar(dest, '"');
- appendStringInfoString(dest, pubname);
- appendStringInfoChar(dest, '"');
+ if (last)
+ appendStringInfo(dest, _("\"%s\""), pubname);
+ else
+ appendStringInfo(dest, _("\"%s\", "), pubname);
}
}
}
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-07 05:05 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 07:24 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 09:25 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-24 03:10 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
@ 2026-04-24 12:14 ` Álvaro Herrera <[email protected]>
2026-04-24 12:43 ` Re: Redundant/mis-use of _(x) gettext macro? David Rowley <[email protected]>
2026-05-18 05:26 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
0 siblings, 2 replies; 13+ messages in thread
From: Álvaro Herrera @ 2026-04-24 12:14 UTC (permalink / raw)
To: Peter Smith <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
On 2026-Apr-24, Peter Smith wrote:
> OK. Including the comma within a larger translated string seems like a
> better idea.
>
> Since you now have the list `length`, I wondered why not simplify
> further to use list_nth indexing? Then you can remove
> `foreach_current_index` and `lc`.
WFM.
> Also, why did you choose to implement `last` versus `first` logic?
> e.g. How about this?
> {
> if (first)
> appendStringInfo(dest, _("\"%s\""), pubname);
> else
> appendStringInfo(dest, _(", \"%s\""), pubname);
> }
I don't know, it just seemed more natural. The whole ", foo" style
simply feels weird to me. It seems a matter of choice only though, so
if you feel strongly about this, I'm not opposed.
--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"Hay dos momentos en la vida de un hombre en los que no debería
especular: cuando puede permitírselo y cuando no puede" (Mark Twain)
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-07 05:05 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 07:24 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 09:25 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-24 03:10 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-24 12:14 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
@ 2026-04-24 12:43 ` David Rowley <[email protected]>
1 sibling, 0 replies; 13+ messages in thread
From: David Rowley @ 2026-04-24 12:43 UTC (permalink / raw)
To: Álvaro Herrera <[email protected]>; +Cc: Peter Smith <[email protected]>; PostgreSQL Hackers <[email protected]>
On Sat, 25 Apr 2026 at 00:14, Álvaro Herrera <[email protected]> wrote:
>
> On 2026-Apr-24, Peter Smith wrote:
>
> > OK. Including the comma within a larger translated string seems like a
> > better idea.
> >
> > Since you now have the list `length`, I wondered why not simplify
> > further to use list_nth indexing? Then you can remove
> > `foreach_current_index` and `lc`.
>
> WFM.
Wouldn't it be simpler to put the comma on the other end of the name
and use that if (foreach_current_index(lc) > 0) ?
Or was this to reuse a translation and you didn't want to swap
"\"%s\", " for , "\"%s\" ?
David
^ permalink raw reply [nested|flat] 13+ messages in thread
* Re: Redundant/mis-use of _(x) gettext macro?
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 11:52 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-07 05:05 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 07:24 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-23 09:25 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
2026-04-24 03:10 ` Re: Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-24 12:14 ` Re: Redundant/mis-use of _(x) gettext macro? Álvaro Herrera <[email protected]>
@ 2026-05-18 05:26 ` Peter Smith <[email protected]>
1 sibling, 0 replies; 13+ messages in thread
From: Peter Smith @ 2026-05-18 05:26 UTC (permalink / raw)
To: Álvaro Herrera <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>
On Tue, Apr 28, 2026 at 11:57 AM Peter Smith <[email protected]> wrote:
>
> On Fri, Apr 24, 2026 at 10:14 PM Álvaro Herrera <[email protected]> wrote:
> >
> > On 2026-Apr-24, Peter Smith wrote:
> >
> > > OK. Including the comma within a larger translated string seems like a
> > > better idea.
> > >
> > > Since you now have the list `length`, I wondered why not simplify
> > > further to use list_nth indexing? Then you can remove
> > > `foreach_current_index` and `lc`.
> >
> > WFM.
> >
> > > Also, why did you choose to implement `last` versus `first` logic?
> > > e.g. How about this?
> >
> > > {
> > > if (first)
> > > appendStringInfo(dest, _("\"%s\""), pubname);
> > > else
> > > appendStringInfo(dest, _(", \"%s\""), pubname);
> > > }
> >
> > I don't know, it just seemed more natural. The whole ", foo" style
> > simply feels weird to me. It seems a matter of choice only though, so
> > if you feel strongly about this, I'm not opposed.
> >
>
> Personally, I prefer `first` logic because
> a) The length of the list is not required up-front
> b) At each iteration, the built string makes sense instead of always
> having a dangling ',' until the final iteration
>
> But it is not a big deal. This thread is about the translation part,
> so whatever way makes the most sense for translators is fine with me.
>
This thread has been inactive for about 5 weeks. AFAIK, everybody was
happy with the patch, and we were only debating if the translated
format string should have a leading comma or a trailing comma. Either
way is OK with me -- whatever way you think makes the most sense to a
translator.
What can I do to help the patch proceed to get pushed?
======
Kind Regards,
Peter Smith.
Fujitsu Australia
^ permalink raw reply [nested|flat] 13+ messages in thread
end of thread, other threads:[~2026-05-18 05:26 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2026-04-01 03:48 Redundant/mis-use of _(x) gettext macro? Peter Smith <[email protected]>
2026-04-01 03:57 ` Chao Li <[email protected]>
2026-04-01 11:52 ` Álvaro Herrera <[email protected]>
2026-04-02 02:55 ` Peter Smith <[email protected]>
2026-04-02 03:11 ` Chao Li <[email protected]>
2026-04-02 03:18 ` Tom Lane <[email protected]>
2026-04-07 05:05 ` Peter Smith <[email protected]>
2026-04-23 07:24 ` Peter Smith <[email protected]>
2026-04-23 09:25 ` Álvaro Herrera <[email protected]>
2026-04-24 03:10 ` Peter Smith <[email protected]>
2026-04-24 12:14 ` Álvaro Herrera <[email protected]>
2026-04-24 12:43 ` David Rowley <[email protected]>
2026-05-18 05:26 ` Peter Smith <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox