Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix set of NLS translation issues
authorMichael Paquier <michael@paquier.xyz>
Tue, 21 Aug 2018 06:18:14 +0000 (15:18 +0900)
committerMichael Paquier <michael@paquier.xyz>
Tue, 21 Aug 2018 06:18:14 +0000 (15:18 +0900)
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
src/backend/commands/view.c
src/backend/libpq/auth.c
src/backend/rewrite/rewriteHandler.c
src/bin/scripts/vacuumdb.c

index 424a426a68360672b7b220b46691adc1952cc411..06cf286e9bd22e0dae159a1bd8e4c61f3b0d4557 100644 (file)
@@ -9523,7 +9523,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))));
        }
    }
 
index 7a0cad8ab9beb1eda9d21b16a0894da12d790883..0caa39b74668b62ee593901f00c1ee77d9e8549d 100644 (file)
@@ -496,7 +496,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))));
    }
 
    /*
index c3339b0ce76499b4ae9b8216cce5b708008b3f1c..1576bdf5e979a7733e7ba175979fe862732ce8a6 100644 (file)
@@ -744,6 +744,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, char *errmsg, OM_uint32 maj_stat, OM_uint32 min_stat)
 {
@@ -933,7 +937,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);
        }
 
@@ -959,7 +963,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);
 
    /*
@@ -1023,6 +1027,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)
 {
index d2ee088b9230f7579d38af195b1cce434a3f1ed1..75dd9a9259764ff77b5b7efbd41fe727a0c6e2ca 100644 (file)
@@ -2147,6 +2147,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.
  */
@@ -2186,6 +2189,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
@@ -2325,6 +2331,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.
  *
index 0b89fc4c7b208effbfd2d7a99657655bdda66e6f..a5fcd30478d2e89e330e0afcbae6c7a118f51051 100644 (file)
@@ -368,7 +368,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));