| From: | Álvaro Herrera <alvherre(at)kurilemu(dot)de> |
|---|---|
| To: | Jeff Davis <pgsql(at)j-davis(dot)com> |
| Cc: | pgsql-hackers(at)postgresql(dot)org |
| Subject: | Re: NLS: use gettext() to translate system error messages |
| Date: | 2025-10-27 13:10:07 |
| Message-ID: | 202510271241.vilasfsxpx7a@alvherre.pgsql |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On 2025-Oct-23, Jeff Davis wrote:
> The attached patch changes "%m" replacements to use gettext for
> translation. That makes the overall translations more consistent,
> equally available on all platforms, and not dependent on LC_CTYPE
> (because gettext allows the encoding for gettext can be set separately
> with bind_textdomain_codeset()).
Hmm, interesting idea. I think the most difficult part is obtaining the
source strings: we need to run your errno_translation.c program on _all_
platforms, merge the output files together, and then create a single
errstrings.po file with all the variations, to reside on our source
tree, which would be given to translators.
Also we need a separate step to create the final postgres.po by
catenating the existing postgres.po with the new errstrings.po; this
should not occur in the source tree but rather at install time, because
of course pg_dump.po is going to have to do the same, and we don't need
to make translators responsible for propagating translations from one
file to others; that occurs already to a very small scale with the
src/common files and I hate it, so I wouldn't want to see it happening
with this much larger set of strings.
BTW looking at the output of that program I realized that with
_GNU_SOURCE, there's strerrorname_np() which can be helpful to generate
the new file in a way that doesn't require you to have all these E
constants in the program. Not sure if other platforms have equivalent
gadgets; but without that I get entries like
#. (null)
msgid "Object is remote"
msgstr "El objeto es remoto"
the (null) bit should perhaps be avoided anyhow.
FWIW the last valid errno I get having patched to use strerrname_np() is
133.
$ ./a.out 0 135
#. 0
msgid "Success"
msgstr "Conseguido"
...
#. EHWPOISON
msgid "Memory page has hardware error"
msgstr "La página de memoria tiene un error de hardware"
#. (null)
msgid "Unknown error 134"
msgstr "Error desconocido 134"
(I think the exit condition of that loop should be "i <= max_err",
otherwise it's confusing.)
> One downside is that there are more messages to translate -- one per
> errno that Postgres might plausibly encounter,
It's not all that many messages, and they only have to be translated
once, so I think this shouldn't be too much of an issue.
--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Fujii Masao | 2025-10-27 13:16:20 | Re: Unnecessary delay in streaming replication due to replay lag |
| Previous Message | Amit Kapila | 2025-10-27 12:42:30 | Re: POC: enable logical decoding when wal_level = 'replica' without a server restart |