https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90152

            Bug ID: 90152
           Summary: untranslated strings in print_z_candidate
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: translation
          Assignee: unassigned at gcc dot gnu.org
          Reporter: roland.illig at gmx dot de
  Target Milestone: ---

From call.c:

  const char *msg = (msgstr == NULL
                     ? ""
                     : ACONCAT ((msgstr, " ", NULL)));

        inform (cloc, "%s%<%D(%T, %T, %T)%> <built-in>", msg, fn,
                candidate->convs[0]->type,
                candidate->convs[1]->type,
                candidate->convs[2]->type);

As a translator I have no idea what this first %s might be. It turns out that
by inspecting the call hierarchy, it can be, among others:

          print_z_candidate (0, "  after user-defined conversion:",
                             t->cand);

That's a string literal starting with two spaces (rather uncommon I think), and
in addition, this string is never translated, as it does not appear in gcc.pot.

If the msgstr can be translated as a self-contained unit of text in all the
languages into which GCC is translated (which as of 2019 are mainly French and
German), the proper fix is to surround these strings with _(...). If not, each
of these messages needs its own call to inform().

There's even a comment above print_z_candidate:

   NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
   to have been run through gettext by the caller.  This wart makes
   life simpler in print_z_candidates and for the translators.  */

Instead of this comment, it would be better to pass the untranslated msgstr to
print_z_candidate by enclosing the actual string literals with _(...). Then,
print_z_candidates could be run in a special test build in which there is an
arbitrary translation for each msgid. Then, gettext(msgstr) must be different
from msgstr itself.

Reply via email to