I wrote: > 1) Does this really pass muster from the translatability standpoint? > I doubt it.
After further thought about that, it seems that what we typically don't try to translate is SQL-standard type names, that is, error messages along the line of "blah blah blah type %s" are considered fine. So the problem here is that you factorized the error reporting poorly. I think you want the callers to look like if (!JsonbExtractScalar(&in->root, &v) || v.type != jbvNumeric) cannotCastJsonbValue(v.type, "double precision"); where the subroutine contains the whole ereport() call, and its lookup table entries are e.g. gettext_noop("cannot cast jsonb string to type %s") regards, tom lane