Skip to content

docs(openspec): schema-metadata-i18n — translatable schema titles/descriptions#2085

Merged
rubenvdlinde merged 1 commit into
developmentfrom
spec/schema-metadata-i18n
Jul 24, 2026
Merged

docs(openspec): schema-metadata-i18n — translatable schema titles/descriptions#2085
rubenvdlinde merged 1 commit into
developmentfrom
spec/schema-metadata-i18n

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

The gap

OpenRegister's i18n stack covers object content (translatable property values, Accept-Language negotiation, source-language tracking). It does not cover schema metadata:

  • lib/Db/Schema.php:144protected ?string $title = null;
  • oc_openregister_schemas.titlevarchar(255) NOT NULL
  • register-i18n/spec.md scopes itself as "distinct from the app UI string translations … for interface labels"

Property titles are exactly what consuming apps render as index column headers and form labels, so whatever language the schema was authored in is what every user sees.

Live evidence

Admin account lang=en, Nextcloud chrome correctly in English, DocuDesk on the shared dev instance (2026-07-24):

/apps/docudesk/templates  →  NAAM · CATEGORIE · PAGINAFORMAAT · NAMESPACE · BESCHRIJVING
/apps/docudesk/signing    →  DOCUMENTNAAM · MODUS · NIVEAU · STATUS · PROVIDER · DEADLINE

…because docudesk_register.json authors those titles in Dutch (ConductionNL/docudesk#341). A leaf app can't fix it alone — authoring in English just strands Dutch users, while ADR-005 mandates NL+EN and SDG 2018/1724 (already the driver for register-i18n) requires English for cross-border services.

What this specs

Per-language maps for schema/property title+description; resolution through the existing Accept-Language negotiation with a deterministic fallback chain (requested → base → register default → first non-empty); the NOT NULL scalar-column invariant so listing/sorting/indexing keep working; an unresolved _metaLanguages=all read so editors and import/export round-trip every language; and BCP 47 + register-languages validation.

Backwards compatible by construction — plain strings keep working and resolve to themselves, so no existing schema needs migration and no consumer app is forced to change.

5 requirements, 11 scenarios. openspec validate --strict clean. Markdown-only.

🤖 Generated with Claude Code

…criptions

OpenRegister's i18n stack covers object CONTENT (translatable property values,
Accept-Language negotiation, source-language tracking). It does not cover schema
METADATA: Schema::$title is ?string and oc_openregister_schemas.title is
varchar(255) NOT NULL, and register-i18n explicitly scopes itself as 'distinct
from the app UI string translations ... for interface labels'.

Those property titles are what consuming apps render as index column headers and
form labels, so whatever language the schema was authored in is what every user
sees. Live evidence (2026-07-24, admin lang=en, NC chrome in English):
DocuDesk's tables render NAAM / CATEGORIE / PAGINAFORMAAT and DOCUMENTNAAM /
MODUS / NIVEAU, because docudesk_register.json authors the titles in Dutch
(ConductionNL/docudesk#341). A leaf app cannot fix this alone — authoring in
English just strands Dutch users, while ADR-005 mandates NL+EN and SDG
2018/1724 requires English for cross-border services.

Specs a per-language map for schema/property title+description, resolution via
the EXISTING Accept-Language negotiation with a deterministic fallback chain,
the NOT NULL scalar-column invariant, an unresolved `_metaLanguages=all` read
for editors/round-trip, and BCP 47 + register-languages validation. Plain
strings keep working, so no existing schema needs migration.

5 requirements, 11 scenarios; openspec validate --strict clean.
@rubenvdlinde
rubenvdlinde merged commit 636e564 into development Jul 24, 2026
15 of 18 checks passed
@rubenvdlinde
rubenvdlinde deleted the spec/schema-metadata-i18n branch July 24, 2026 18:08
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openregister @ b2355ba

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 174/174
npm ✅ 555/555
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️

Quality workflow — 2026-07-24 18:12 UTC

Download the full PDF report from the workflow artifacts.

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