At Thu, 15 Oct 2020 14:28:57 +0900, Masahiko Sawada <masahiko.saw...@2ndquadrant.com> wrote in > > ereport(..(errmsg("%s", _("hogehoge")))) results in > > fprintf((translated("%s")), translate("hogehoge")). > > > > So your change (errmsg("%s", gettext_noop("hogehoge")) results in > > > > fprintf((translated("%s")), DONT_translate("hogehoge")). > > > > which leads to a translation problem. > > > > (errmsg(gettext_noop("hogehoge")) > > This seems equivalent to (errmsg("hogehoge")), right?
Yes and no. However eventually the two works the same way, "(errmsg(gettext_noop("hogehoge"))" is a shorthand of 1: char *msg = gettext_noop("hogehoge"); ... 2: .. (errmsg(msg)); That is, the line 1 only registers a message id "hogehoge" and doesn't translate. The line 2 tries to translate the content of msg and it finds the translation for the message id "hogehoge". > I think I could understand translation stuff. Given we only report the > const string returned from get_recovery_conflict_desc() without > placeholders, the patch needs to use errmsg_internal() instead while > not changing _() part. (errmsg(get_recovery_conflict_desc())) is not > good (warned by -Wformat-security). Ah, right. we get a complain if no value parameters added. We can silence it by adding a dummy parameter to errmsg, but I'm not sure which is preferable. regards. -- Kyotaro Horiguchi NTT Open Source Software Center