From 3ef153c7157fd679c0acc20433c99d109b16222b Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 21 Aug 2018 15:17:25 +0900 Subject: [PATCH] Fix set of NLS translation issues While monitoring the code, a couple of issues related to string translation has showed up: - Some routines for auto-updatable views return an error string, which sometimes missed the shot. A comment regarding string translation is added for each routine to help with future features. - GSSAPI authentication missed two translations. - vacuumdb handles non-translated strings. Reported-by: Kyotaro Horiguchi Author: Kyotaro Horiguchi Reviewed-by: Michael Paquier, Tom Lane Discussion: https://postgr.es/m/20180810.152131.31921918.horiguchi.kyotaro@lab.ntt.co.jp Backpatch-through: 9.3 --- src/backend/commands/tablecmds.c | 2 +- src/backend/commands/view.c | 2 +- src/backend/libpq/auth.c | 13 +++++++++++-- src/backend/rewrite/rewriteHandler.c | 9 +++++++++ src/bin/scripts/vacuumdb.c | 2 +- 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 55aef490110..55eb6747ea9 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -10801,7 +10801,7 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation, ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("WITH CHECK OPTION is supported only on automatically updatable views"), - errhint("%s", view_updatable_error))); + errhint("%s", _(view_updatable_error)))); } } diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index 7d4511c585b..ffb71c0ea7c 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -502,7 +502,7 @@ DefineView(ViewStmt *stmt, const char *queryString, ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("WITH CHECK OPTION is supported only on automatically updatable views"), - errhint("%s", view_updatable_error))); + errhint("%s", _(view_updatable_error)))); } /* diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index cecd104b4a5..68bb62d873c 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -1037,6 +1037,10 @@ static GSS_DLLIMP gss_OID GSS_C_NT_USER_NAME = &GSS_C_NT_USER_NAME_desc; #endif +/* + * Generate an error for GSSAPI authentication. The caller should apply + * _() to errmsg to make it translatable. + */ static void pg_GSS_error(int severity, const char *errmsg, OM_uint32 maj_stat, OM_uint32 min_stat) { @@ -1227,7 +1231,7 @@ pg_GSS_recvauth(Port *port) { gss_delete_sec_context(&lmin_s, &port->gss->ctx, GSS_C_NO_BUFFER); pg_GSS_error(ERROR, - gettext_noop("accepting GSS security context failed"), + _("accepting GSS security context failed"), maj_stat, min_stat); } @@ -1253,7 +1257,7 @@ pg_GSS_recvauth(Port *port) maj_stat = gss_display_name(&min_stat, port->gss->name, &gbuf, NULL); if (maj_stat != GSS_S_COMPLETE) pg_GSS_error(ERROR, - gettext_noop("retrieving GSS user name failed"), + _("retrieving GSS user name failed"), maj_stat, min_stat); /* @@ -1317,6 +1321,11 @@ pg_GSS_recvauth(Port *port) *---------------------------------------------------------------- */ #ifdef ENABLE_SSPI + +/* + * Generate an error for SSPI authentication. The caller should apply + * _() to errmsg to make it translatable. + */ static void pg_SSPI_error(int severity, const char *errmsg, SECURITY_STATUS r) { diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 3123ee274db..d8305696418 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -2217,6 +2217,9 @@ view_has_instead_trigger(Relation view, CmdType event) * is auto-updatable. Returns NULL (if the column can be updated) or a message * string giving the reason that it cannot be. * + * The returned string has not been translated; if it is shown as an error + * message, the caller should apply _() to translate it. + * * Note that the checks performed here are local to this view. We do not check * whether the referenced column of the underlying base relation is updatable. */ @@ -2256,6 +2259,9 @@ view_col_is_auto_updatable(RangeTblRef *rtr, TargetEntry *tle) * view_query_is_auto_updatable - test whether the specified view definition * represents an auto-updatable view. Returns NULL (if the view can be updated) * or a message string giving the reason that it cannot be. + + * The returned string has not been translated; if it is shown as an error + * message, the caller should apply _() to translate it. * * If check_cols is true, the view is required to have at least one updatable * column (necessary for INSERT/UPDATE). Otherwise the view's columns are not @@ -2396,6 +2402,9 @@ view_query_is_auto_updatable(Query *viewquery, bool check_cols) * required columns can be updated) or a message string giving the reason that * they cannot be. * + * The returned string has not been translated; if it is shown as an error + * message, the caller should apply _() to translate it. + * * This should be used for INSERT/UPDATE to ensure that we don't attempt to * assign to any non-updatable columns. * diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 6ab77b62063..bcea9e556dc 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -371,7 +371,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, { if (stage != ANALYZE_NO_STAGE) printf(_("%s: processing database \"%s\": %s\n"), - progname, PQdb(conn), stage_messages[stage]); + progname, PQdb(conn), _(stage_messages[stage])); else printf(_("%s: vacuuming database \"%s\"\n"), progname, PQdb(conn));