agora inbox for pgsql-hackers@postgresql.org  
help / color / mirror / Atom feed
Mark class_descr strings for translation
6+ messages / 4 participants
[nested] [flat]

* Mark class_descr strings for translation
@ 2026-07-03 06:37  Kyotaro Horiguchi <horikyota.ntt@gmail.com>
  0 siblings, 2 replies; 6+ messages in thread

From: Kyotaro Horiguchi @ 2026-07-03 06:37 UTC (permalink / raw)
  To: pgsql-hackers@lists.postgresql.org

Hello,

While working on the translation, I encountered the following message.

pg_depend.c:809
>		if (!HeapTupleIsValid(tuple))
>			ereport(ERROR,
>					(errcode(ERRCODE_UNDEFINED_OBJECT),
>					 errmsg("referenced %s was concurrently dropped",
>							get_object_class_descr(classId))));

As you can see, it is a user-facing message, which embeds the return
value from get_object_class_descr(), which returns
ObjectPropertyType.class_descr, which is described as "for internal
error messages" in objectaddress.c.

As a result, the resulting message in Japanese becomes rather
unnatural.

> $B;2>H@h$N(B foreign-data wrapper $B$OJB9T$7$F:o=|$5$l$^$7$?(B

The attached patch marks the class_descr strings for translation, so
that the message can be translated. I'm not entirely sure whether this
is the right direction, but since class_descr is already used in
messages intended to be read by humans, even if they are not
necessarily user-facing, it seems reasonable to me.

With that change, the message above becomes:

> $B;2>H@h$N30It%G!<%?%i%C%Q$OJB9T$7$F:o=|$5$l$^$7$?(B

One concern I have is that this may be somewhat easy to overlook,
since it requires remembering to wrap the return value in _() rather
than translating a string literal. That said, I don't expect this
pattern to be used very often, so I don't think it is a significant
problem.

By the way, I also noticed that we have two spellings, "foreign-data
wrapper" and "foreign data wrapper". I looked through the
documentation for the canonical spelling, but found both spellings
used on the same page, so I couldn't determine which one is preferred.

Regards,

-- 
Kyotaro Horiguchi
NTT Open Source Software Center

Attachments:

  [text/x-patch] v1-0001-Mark-object-class-descriptions-for-translation.patch (10.5K, ../../20260703.153742.1355839543750682384.horikyota.ntt@gmail.com/2-v1-0001-Mark-object-class-descriptions-for-translation.patch)
  download | inline diff:
From eefafd614f171e07cb1ec57922bf7facbbf83a7c Mon Sep 17 00:00:00 2001
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Date: Fri, 3 Jul 2026 15:06:04 +0900
Subject: [PATCH v1] Mark object class descriptions for translation

ObjectPropertyType.class_descr was originally intended for internal
error messages, but is now also used in a translated error message.
Mark the object class descriptions for translation and translate the
return value of get_object_class_descr().
---
 src/backend/catalog/objectaddress.c | 88 ++++++++++++++---------------
 src/backend/catalog/pg_depend.c     |  2 +-
 2 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index af0e4703616..12dc76b712a 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -100,8 +100,8 @@
  */
 typedef struct
 {
-	const char *class_descr;	/* string describing the catalog, for internal
-								 * error messages */
+	const char *class_descr;	/* string describing the catalog, for error
+								 * messages */
 	Oid			class_oid;		/* oid of catalog */
 	Oid			oid_index_oid;	/* oid of index on system oid column */
 	SysCacheIdentifier oid_catcache_id; /* id of catcache on system oid column	*/
@@ -124,7 +124,7 @@ typedef struct
 static const ObjectPropertyType ObjectProperty[] =
 {
 	{
-		"access method",
+		gettext_noop("access method"),
 		AccessMethodRelationId,
 		AmOidIndexId,
 		AMOID,
@@ -138,7 +138,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"access method operator",
+		gettext_noop("access method operator"),
 		AccessMethodOperatorRelationId,
 		AccessMethodOperatorOidIndexId,
 		SYSCACHEID_INVALID,
@@ -152,7 +152,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"access method procedure",
+		gettext_noop("access method procedure"),
 		AccessMethodProcedureRelationId,
 		AccessMethodProcedureOidIndexId,
 		SYSCACHEID_INVALID,
@@ -166,7 +166,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"cast",
+		gettext_noop("cast"),
 		CastRelationId,
 		CastOidIndexId,
 		SYSCACHEID_INVALID,
@@ -180,7 +180,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"collation",
+		gettext_noop("collation"),
 		CollationRelationId,
 		CollationOidIndexId,
 		COLLOID,
@@ -194,7 +194,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"constraint",
+		gettext_noop("constraint"),
 		ConstraintRelationId,
 		ConstraintOidIndexId,
 		CONSTROID,
@@ -208,7 +208,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"conversion",
+		gettext_noop("conversion"),
 		ConversionRelationId,
 		ConversionOidIndexId,
 		CONVOID,
@@ -222,7 +222,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"database",
+		gettext_noop("database"),
 		DatabaseRelationId,
 		DatabaseOidIndexId,
 		DATABASEOID,
@@ -236,7 +236,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"default ACL",
+		gettext_noop("default ACL"),
 		DefaultAclRelationId,
 		DefaultAclOidIndexId,
 		SYSCACHEID_INVALID,
@@ -250,7 +250,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"extension",
+		gettext_noop("extension"),
 		ExtensionRelationId,
 		ExtensionOidIndexId,
 		SYSCACHEID_INVALID,
@@ -264,7 +264,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"foreign-data wrapper",
+		gettext_noop("foreign-data wrapper"),
 		ForeignDataWrapperRelationId,
 		ForeignDataWrapperOidIndexId,
 		FOREIGNDATAWRAPPEROID,
@@ -278,7 +278,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"foreign server",
+		gettext_noop("foreign server"),
 		ForeignServerRelationId,
 		ForeignServerOidIndexId,
 		FOREIGNSERVEROID,
@@ -292,7 +292,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"function",
+		gettext_noop("function"),
 		ProcedureRelationId,
 		ProcedureOidIndexId,
 		PROCOID,
@@ -306,7 +306,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"language",
+		gettext_noop("language"),
 		LanguageRelationId,
 		LanguageOidIndexId,
 		LANGOID,
@@ -320,7 +320,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"large object metadata",
+		gettext_noop("large object metadata"),
 		LargeObjectMetadataRelationId,
 		LargeObjectMetadataOidIndexId,
 		SYSCACHEID_INVALID,
@@ -334,7 +334,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"operator class",
+		gettext_noop("operator class"),
 		OperatorClassRelationId,
 		OpclassOidIndexId,
 		CLAOID,
@@ -348,7 +348,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"operator",
+		gettext_noop("operator"),
 		OperatorRelationId,
 		OperatorOidIndexId,
 		OPEROID,
@@ -362,7 +362,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"operator family",
+		gettext_noop("operator family"),
 		OperatorFamilyRelationId,
 		OpfamilyOidIndexId,
 		OPFAMILYOID,
@@ -376,7 +376,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"property graph element",
+		gettext_noop("property graph element"),
 		PropgraphElementRelationId,
 		PropgraphElementObjectIndexId,
 		PROPGRAPHELOID,
@@ -390,7 +390,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"property graph element label",
+		gettext_noop("property graph element label"),
 		PropgraphElementLabelRelationId,
 		PropgraphElementLabelObjectIndexId,
 		-1,
@@ -404,7 +404,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"property graph label",
+		gettext_noop("property graph label"),
 		PropgraphLabelRelationId,
 		PropgraphLabelObjectIndexId,
 		PROPGRAPHLABELOID,
@@ -418,7 +418,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"property graph label property",
+		gettext_noop("property graph label property"),
 		PropgraphLabelPropertyRelationId,
 		PropgraphLabelPropertyObjectIndexId,
 		-1,
@@ -432,7 +432,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"property graph property",
+		gettext_noop("property graph property"),
 		PropgraphPropertyRelationId,
 		PropgraphPropertyObjectIndexId,
 		-1,
@@ -446,7 +446,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"role",
+		gettext_noop("role"),
 		AuthIdRelationId,
 		AuthIdOidIndexId,
 		AUTHOID,
@@ -460,7 +460,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"role membership",
+		gettext_noop("role membership"),
 		AuthMemRelationId,
 		AuthMemOidIndexId,
 		SYSCACHEID_INVALID,
@@ -474,7 +474,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"rule",
+		gettext_noop("rule"),
 		RewriteRelationId,
 		RewriteOidIndexId,
 		SYSCACHEID_INVALID,
@@ -488,7 +488,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"schema",
+		gettext_noop("schema"),
 		NamespaceRelationId,
 		NamespaceOidIndexId,
 		NAMESPACEOID,
@@ -502,7 +502,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"relation",
+		gettext_noop("relation"),
 		RelationRelationId,
 		ClassOidIndexId,
 		RELOID,
@@ -516,7 +516,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"tablespace",
+		gettext_noop("tablespace"),
 		TableSpaceRelationId,
 		TablespaceOidIndexId,
 		TABLESPACEOID,
@@ -530,7 +530,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"transform",
+		gettext_noop("transform"),
 		TransformRelationId,
 		TransformOidIndexId,
 		TRFOID,
@@ -544,7 +544,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"trigger",
+		gettext_noop("trigger"),
 		TriggerRelationId,
 		TriggerOidIndexId,
 		SYSCACHEID_INVALID,
@@ -558,7 +558,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"policy",
+		gettext_noop("policy"),
 		PolicyRelationId,
 		PolicyOidIndexId,
 		SYSCACHEID_INVALID,
@@ -572,7 +572,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		false
 	},
 	{
-		"event trigger",
+		gettext_noop("event trigger"),
 		EventTriggerRelationId,
 		EventTriggerOidIndexId,
 		EVENTTRIGGEROID,
@@ -586,7 +586,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"text search configuration",
+		gettext_noop("text search configuration"),
 		TSConfigRelationId,
 		TSConfigOidIndexId,
 		TSCONFIGOID,
@@ -600,7 +600,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"text search dictionary",
+		gettext_noop("text search dictionary"),
 		TSDictionaryRelationId,
 		TSDictionaryOidIndexId,
 		TSDICTOID,
@@ -614,7 +614,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"text search parser",
+		gettext_noop("text search parser"),
 		TSParserRelationId,
 		TSParserOidIndexId,
 		TSPARSEROID,
@@ -628,7 +628,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"text search template",
+		gettext_noop("text search template"),
 		TSTemplateRelationId,
 		TSTemplateOidIndexId,
 		TSTEMPLATEOID,
@@ -642,7 +642,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true,
 	},
 	{
-		"type",
+		gettext_noop("type"),
 		TypeRelationId,
 		TypeOidIndexId,
 		TYPEOID,
@@ -656,7 +656,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"publication",
+		gettext_noop("publication"),
 		PublicationRelationId,
 		PublicationObjectIndexId,
 		PUBLICATIONOID,
@@ -670,7 +670,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"subscription",
+		gettext_noop("subscription"),
 		SubscriptionRelationId,
 		SubscriptionObjectIndexId,
 		SUBSCRIPTIONOID,
@@ -684,7 +684,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"extended statistics",
+		gettext_noop("extended statistics"),
 		StatisticExtRelationId,
 		StatisticExtOidIndexId,
 		STATEXTOID,
@@ -698,7 +698,7 @@ static const ObjectPropertyType ObjectProperty[] =
 		true
 	},
 	{
-		"user mapping",
+		gettext_noop("user mapping"),
 		UserMappingRelationId,
 		UserMappingOidIndexId,
 		USERMAPPINGOID,
diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c
index 9a7a401aced..0d28d34412d 100644
--- a/src/backend/catalog/pg_depend.c
+++ b/src/backend/catalog/pg_depend.c
@@ -810,7 +810,7 @@ dependencyLockAndCheckObject(Oid classId, Oid objectId)
 			ereport(ERROR,
 					(errcode(ERRCODE_UNDEFINED_OBJECT),
 					 errmsg("referenced %s was concurrently dropped",
-							get_object_class_descr(classId))));
+							_(get_object_class_descr(classId)))));
 
 		systable_endscan(scan);
 		table_close(rel, AccessShareLock);
-- 
2.52.0

^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Mark class_descr strings for translation
@ 2026-07-03 08:19  Ewan Young <kdbase.hack@gmail.com>
  parent: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
  1 sibling, 0 replies; 6+ messages in thread

From: Ewan Young @ 2026-07-03 08:19 UTC (permalink / raw)
  To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>; +Cc: pgsql-hackers@lists.postgresql.org

On Fri, Jul 3, 2026 at 2:37 PM Kyotaro Horiguchi
<horikyota.ntt@gmail.com> wrote:
>
> Hello,
>
> While working on the translation, I encountered the following message.
>
> pg_depend.c:809
> >               if (!HeapTupleIsValid(tuple))
> >                       ereport(ERROR,
> >                                       (errcode(ERRCODE_UNDEFINED_OBJECT),
> >                                        errmsg("referenced %s was concurrently dropped",
> >                                                       get_object_class_descr(classId))));
>
> As you can see, it is a user-facing message, which embeds the return
> value from get_object_class_descr(), which returns
> ObjectPropertyType.class_descr, which is described as "for internal
> error messages" in objectaddress.c.
>
> As a result, the resulting message in Japanese becomes rather
> unnatural.
>
> > 参照先の foreign-data wrapper は並行して削除されました
>
> The attached patch marks the class_descr strings for translation, so
> that the message can be translated. I'm not entirely sure whether this
> is the right direction, but since class_descr is already used in
> messages intended to be read by humans, even if they are not
> necessarily user-facing, it seems reasonable to me.

+1 on the direction. The mechanism is right: since the strings live in
the static ObjectProperty[] array, xgettext can't pick them up at the
_() call site, so they have to be marked with gettext_noop() at the
array and translated with _() where they're consumed. Both halves of
the patch are needed, and they're paired correctly.

(FWIW the patch as attached has CRLF line endings, so it doesn't apply
with a plain git apply -- only with --ignore-whitespace. Probably a
mail-transport artifact; a resend with LF endings would help whoever
applies it.)

>
> With that change, the message above becomes:
>
> > 参照先の外部データラッパは並行して削除されました
>
> One concern I have is that this may be somewhat easy to overlook,
> since it requires remembering to wrap the return value in _() rather
> than translating a string literal. That said, I don't expect this
> pattern to be used very often, so I don't think it is a significant
> problem.
>
> By the way, I also noticed that we have two spellings, "foreign-data
> wrapper" and "foreign data wrapper". I looked through the
> documentation for the canonical spelling, but found both spellings
> used on the same page, so I couldn't determine which one is preferred.
>
> Regards,
>
> --
> Kyotaro Horiguchi
> NTT Open Source Software Center

-- 
Regards,
Ewan Young





^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Mark class_descr strings for translation
@ 2026-07-07 11:51  Álvaro Herrera <alvherre@kurilemu.de>
  parent: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
  1 sibling, 1 reply; 6+ messages in thread

From: Álvaro Herrera @ 2026-07-07 11:51 UTC (permalink / raw)
  To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>; +Cc: pgsql-hackers@lists.postgresql.org

On 2026-Jul-03, Kyotaro Horiguchi wrote:

> diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c
> index 9a7a401aced..0d28d34412d 100644
> --- a/src/backend/catalog/pg_depend.c
> +++ b/src/backend/catalog/pg_depend.c
> @@ -810,7 +810,7 @@ dependencyLockAndCheckObject(Oid classId, Oid objectId)
>  			ereport(ERROR,
>  					(errcode(ERRCODE_UNDEFINED_OBJECT),
>  					 errmsg("referenced %s was concurrently dropped",
> -							get_object_class_descr(classId))));
> +							_(get_object_class_descr(classId)))));

I agree with the patch idea in general, but I'm not sure that this
string is really adequate.  For instance, with this string we cannot
make "referenced" and "dropped" in the right gender declension depending
on the object type, and that will make the message look weird in some
languages -- specifically in Spanish but I'm guessing it can be a
problem in others as well.
     "rol referenciado fue borrado concurrentemente"
   "tabla referenciada fue borrada concurrentemente"
and so on.
(Most object types are feminine, but at least "role" and "operator" are
masculine.)

I propose we make this
  "referenced object of type \"%s\" was concurrently dropped"

so that the declension of "referenced" and "dropped" refer to the gender
of the word "object".  We'd no longer have a problem there:
  "el objeto referenciado de tipo "tabla" fue borrado concurrentemente"
This reads a bit odd, but we no longer have a grammatical gender problem
there.

(We could leave out the quote marks, perhaps.)

-- 
Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/





^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Mark class_descr strings for translation
@ 2026-07-07 12:39  Peter Eisentraut <peter@eisentraut.org>
  parent: Álvaro Herrera <alvherre@kurilemu.de>
  0 siblings, 1 reply; 6+ messages in thread

From: Peter Eisentraut @ 2026-07-07 12:39 UTC (permalink / raw)
  To: Álvaro Herrera <alvherre@kurilemu.de>; Kyotaro Horiguchi <horikyota.ntt@gmail.com>; +Cc: pgsql-hackers@lists.postgresql.org

On 07.07.26 13:51, Álvaro Herrera wrote:
> On 2026-Jul-03, Kyotaro Horiguchi wrote:
> 
>> diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c
>> index 9a7a401aced..0d28d34412d 100644
>> --- a/src/backend/catalog/pg_depend.c
>> +++ b/src/backend/catalog/pg_depend.c
>> @@ -810,7 +810,7 @@ dependencyLockAndCheckObject(Oid classId, Oid objectId)
>>   			ereport(ERROR,
>>   					(errcode(ERRCODE_UNDEFINED_OBJECT),
>>   					 errmsg("referenced %s was concurrently dropped",
>> -							get_object_class_descr(classId))));
>> +							_(get_object_class_descr(classId)))));
> 
> I agree with the patch idea in general, but I'm not sure that this
> string is really adequate.  For instance, with this string we cannot
> make "referenced" and "dropped" in the right gender declension depending
> on the object type, and that will make the message look weird in some
> languages -- specifically in Spanish but I'm guessing it can be a
> problem in others as well.
>       "rol referenciado fue borrado concurrentemente"
>     "tabla referenciada fue borrada concurrentemente"
> and so on.
> (Most object types are feminine, but at least "role" and "operator" are
> masculine.)
> 
> I propose we make this
>    "referenced object of type \"%s\" was concurrently dropped"
> 
> so that the declension of "referenced" and "dropped" refer to the gender
> of the word "object".  We'd no longer have a problem there:
>    "el objeto referenciado de tipo "tabla" fue borrado concurrentemente"
> This reads a bit odd, but we no longer have a grammatical gender problem
> there.
> 
> (We could leave out the quote marks, perhaps.)

The class_descr is meant for internal messages only, for the reasons you 
describe.  The fact that there is now a non-internal message that uses 
it is a bug and that should be fixed at that caller.

When I was working on generating the ObjectProperty tables 
automatically, I was working toward getting rid of class_descr 
altogether, because it's mostly not useful.  (For internal error 
messages, you might as well just print the actual catalog name.)  I 
don't think we should be working toward making this facility more 
attractive now.






^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Mark class_descr strings for translation
@ 2026-07-07 16:50  Álvaro Herrera <alvherre@kurilemu.de>
  parent: Peter Eisentraut <peter@eisentraut.org>
  0 siblings, 1 reply; 6+ messages in thread

From: Álvaro Herrera @ 2026-07-07 16:50 UTC (permalink / raw)
  To: Peter Eisentraut <peter@eisentraut.org>; +Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>; pgsql-hackers@lists.postgresql.org

On 2026-Jul-07, Peter Eisentraut wrote:

> The class_descr is meant for internal messages only, for the reasons you
> describe.  The fact that there is now a non-internal message that uses it is
> a bug and that should be fixed at that caller.

Ummm, okay, but I'm not really looking forward to having two dozen
additional messages to translate that only differ in the object type.

I'll stand by to see what other ideas we can come up with, then :-)

-- 
Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/





^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Mark class_descr strings for translation
@ 2026-07-08 07:00  Kyotaro Horiguchi <horikyota.ntt@gmail.com>
  parent: Álvaro Herrera <alvherre@kurilemu.de>
  0 siblings, 0 replies; 6+ messages in thread

From: Kyotaro Horiguchi @ 2026-07-08 07:00 UTC (permalink / raw)
  To: alvherre@kurilemu.de; +Cc: peter@eisentraut.org; pgsql-hackers@lists.postgresql.org

At Tue, 7 Jul 2026 18:50:27 +0200, Álvaro Herrera <alvherre@kurilemu.de> wrote in 
> > >       "rol referenciado fue borrado concurrentemente"
> > >     "tabla referenciada fue borrada concurrentemente"

Ah, I hadn't considered that.

> On 2026-Jul-07, Peter Eisentraut wrote:
> > The class_descr is meant for internal messages only, for the reasons you
> > describe.  The fact that there is now a non-internal message that uses it is
> > a bug and that should be fixed at that caller.
> 
> Ummm, okay, but I'm not really looking forward to having two dozen
> additional messages to translate that only differ in the object type.
> 
> I'll stand by to see what other ideas we can come up with, then :-)

+1 from me.

Regards,

-- 
Kyotaro Horiguchi
NTT Open Source Software Center






^ permalink  raw  reply  [nested|flat] 6+ messages in thread


end of thread, other threads:[~2026-07-08 07:00 UTC | newest]

Thread overview: 6+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2026-07-03 06:37 Mark class_descr strings for translation Kyotaro Horiguchi <horikyota.ntt@gmail.com>
2026-07-03 08:19 ` Ewan Young <kdbase.hack@gmail.com>
2026-07-07 11:51 ` Álvaro Herrera <alvherre@kurilemu.de>
2026-07-07 12:39   ` Peter Eisentraut <peter@eisentraut.org>
2026-07-07 16:50     ` Álvaro Herrera <alvherre@kurilemu.de>
2026-07-08 07:00       ` Kyotaro Horiguchi <horikyota.ntt@gmail.com>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox