On Wed, Nov 15, 2023 at 3:58 PM Alvaro Herrera <alvhe...@alvh.no-ip.org> wrote: > > Translation-wise, this doesn't work, because you're building a string. > There's no reason to think that the words "logical" and "physical" > should stay untranslated; the message would make no sense, or at least > would be very ugly. > > You should do something like > > if (am_walsender) > { > ereport(log_replication_commands ? LOG : DEBUG1, > SlotIsLogical(s) ? errmsg("acquired logical replication slot > \"%s\"", NameStr(s->data.name)) : > errmsg("acquired physical replication slot \"%s\"", > NameStr(s->data.name))); > } > > (Obviously, lose the "translator:" comments since they are unnecessary) > > > If you really want to keep the "logical"/"physical" word untranslated, > you need to split it out of the sentence somehow. But it would be > really horrible IMO. Like > > errmsg("acquired replication slot \"%s\" of type \"%s\"", > NameStr(s->data.name), SlotIsLogical(s) ? "logical" : "physical") >
Thanks for the suggestion. I would like to clarify on this a bit. What do exactly mean by splitting out of the sentence? For example, in one of the existing messages: ereport(LOG, /* translator: %s is SIGKILL or SIGABRT */ (errmsg("issuing %s to recalcitrant children", send_abort_for_kill ? "SIGABRT" : "SIGKILL"))); Do here words SIGABRT/SIGKILL remain untranslated due to the translator's comment? I thought this was similar to the message being proposed but seems like this message construction follows translation rules better. -- With Regards, Amit Kapila.