Skip to content

proposal: a key of a multilingual entity is not translated - #61

Merged
delchev merged 1 commit into
mainfrom
propose/non-translatable-key
Sep 6, 2026
Merged

proposal: a key of a multilingual entity is not translated#61
delchev merged 1 commit into
mainfrom
propose/non-translatable-key

Conversation

@delchev

@delchev delchev commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Adds proposals/0030-non-translatable-key.md. Per the proposals process this PR touches no version document.

What the gap is

Translatability is derived from the type: mark an entity multilingual: true and every string property gains a per-language value. That is right for a label and wrong for a key — the column a determination rule's match selects on, the business key an arrival's lookup/by resolves a relation by.

A key is compared, not read. Once it is translatable, the comparison is on a moving target: the read overlay shows the translated value, saving the row from the UI writes the translated value into the stored column, and from then on the literal the intent was authored with matches nothing. Nothing fails. The posting simply never fires again in that language; the arrival's lookup resolves nothing. A rule that has silently stopped applying looks exactly like a document nobody posted.

What it proposes

translatable: false on a field: no column in the translation table, never overlaid on a read, read as stored in a report column, and refused in a translation seed. Default true, so an existing model is unchanged.

And, because the property becomes declarable, the two matching sites can be held to it: a determination rule's match column and a lookup's by field must not be translated, and an intent that matches on a translated property is an authoring error naming the marker.

Deliberate edge rules: the marker is refused where it cannot mean anything (a non-multilingual entity, a non-string property) rather than accepted and ignored — a marker that reads as protection but is not there is worse than none.

Carries Specification text, Anchor (Multilingual data > Data, after the report normative block) and the DSL index row, so the release fold is mechanical.

Implementation: eclipse-dirigible/dirigible#6545 (platform PR eclipse-dirigible/dirigible#7038).

Translatability is derived from the type, so marking an entity multilingual
makes every string property translatable - right for a label, wrong for a KEY:
the column a determination rule matches on, the business key an arrival resolves
a relation by. Translating a key breaks the match with no observable failure at
all, and the model has no way to say the property is a key.

Proposes `translatable: false` on a field, and holds the two matching sites to
it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant