Hello.

While I revised the translation, I ran across the following code.

>    form_policy = (Form_pg_policy) GETSTRUCT(tuple);
>
>    appendStringInfo(&buffer, _("policy %s on "),
>             NameStr(form_policy->polname));
>    getRelationDescription(&buffer, form_policy->polrelid);

getRelationDescription appends a string like "table %s" to the
buffer so finally a message like "policy %s on table %s" is
constructed but this is very unfriendly to Japanese syntax.

The "policy %s" and "<objname> %s" are transposed in Japaese
syntax.  Specifically "<objname> %s NO <policy> %s" is the
natural translation of "policy %s on <objname> %s". But currently
we cannot get the natural error message in Japanese.

For the reason, I'd like to propose to refactor
getObjectDescription:OPCLASS_POLICY as the attached patch. The
same structure is seen for OPCLASS_AMOP.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index d371c47842..baa77e4e79 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -3356,6 +3356,7 @@ getObjectDescription(const ObjectAddress *object)
 				SysScanDesc sscan;
 				HeapTuple	tuple;
 				Form_pg_policy form_policy;
+				StringInfoData reldesc;
 
 				policy_rel = heap_open(PolicyRelationId, AccessShareLock);
 
@@ -3375,9 +3376,13 @@ getObjectDescription(const ObjectAddress *object)
 
 				form_policy = (Form_pg_policy) GETSTRUCT(tuple);
 
-				appendStringInfo(&buffer, _("policy %s on "),
-								 NameStr(form_policy->polname));
-				getRelationDescription(&buffer, form_policy->polrelid);
+				initStringInfo(&reldesc);
+				getRelationDescription(&reldesc, form_policy->polrelid);
+
+				appendStringInfo(&buffer, _("policy %s on %s"),
+								 NameStr(form_policy->polname),
+								 reldesc.data);
+				pfree(reldesc.data);
 
 				systable_endscan(sscan);
 				heap_close(policy_rel, AccessShareLock);

Reply via email to