Skip to content

i18n: move UI translations to versioned DB ledger and complete 8-locale coverage #922

Description

@seonghobae

Buyer-visible gap

LineageWeave currently declares only en, ko, zh, ja, and vi in frontend/src/i18n.ts, and translation resources are compiled into the SPA source. The product contract requires KO/EN/JA/ZH/VI/ES/DE/FR and a database-distributed, versioned translation ledger with screen-key caching; ontology labels remain a separate semantic concern.

This is a LineageWeave presentation/read-model boundary. Do not copy ontology truth, locale management, or other CWL owners into this repository. If a released shared i18n owner becomes available, consume it through a versioned contract/ACL instead of duplicating it.

Required repair

  1. Add es, de, and fr as first-class supported locales without treating English fallback as translated coverage.
  2. Replace the SPA-bundled translation dictionary as the production source of truth with a normalized PostgreSQL translation ledger. Keep the client payload scoped by product/screen/key/locale/version and cache by immutable/versioned ledger identity so locale switching does not require shipping the full translation corpus in the JS bundle.
  3. Preserve English source keys as stable message identities for the migration only if an ADR demonstrates collision/versioning safety; otherwise introduce an explicit stable message key and migrate callers without breaking existing accessibility names.
  4. Keep ontology labels out of the translation ledger. Translation records are presentation resources, not semantic ontology truth.
  5. Fail closed on missing required production translations for the eight supported locales in release/build evidence; development fallback must be explicit and observable, not silently counted as coverage.
  6. Verify KO/EN/JA/ZH/VI/ES/DE/FR text expansion, CJK rendering/font fallback, normal/loading/empty/error/permission states, responsive layouts, keyboard/focus semantics, and screen-reader names for material UI.
  7. Add migration/rollback, seed/version provenance, cache invalidation semantics, tenant/scope rules if applicable, API/read-model contract, and operational evidence. No cross-service SQL.
  8. Update PRD/TRD/ARCHITECTURE/ADR/UX/OPERABILITY/TEST_STRATEGY and docs/product-technical-gap-baseline.md code-current with the chosen transaction/cache/version boundary.

RED acceptance

  • A contract test must demonstrate that SUPPORTED_LOCALES is missing es, de, and fr on current code.
  • A packaging/build assertion must demonstrate that production translation payloads currently live in the frontend source/bundle rather than a versioned database resource.
  • An i18n completeness test must distinguish a real translation from English fallback and fail when any required screen key is missing in one of the eight supported locales.

GREEN acceptance

  • SUPPORTED_LOCALES contains exactly the supported product locales KO/EN/JA/ZH/VI/ES/DE/FR (canonical locale tags documented).
  • Production translations are read through the versioned DB-ledger/API boundary and screen-key cache; the frontend bundle is not the canonical translation store.
  • Full current-head i18n/accessibility tests cover all eight locales and all material states; no untranslated fallback is counted as translated coverage.
  • Migration rollback and immutable/versioned resource provenance are demonstrated on current head.
  • No ontology-label conflation, raw cross-service SQL, or mutable sibling dependency is introduced.

Open material-UI lanes covered by this gate

At the 2026-09-03 live sweep, this release gate applies to open material UI work including #667 (Ask history), #679 (public-claim verification), #770 (project-history timeline), #774 (Operations Dashboard status), #802 (leftover-map explained-share presentation), #903 (Event Lineage), #907 (Affiliate Tree), #909 (Customer Master), and the #918#920#921 leftover-map composition stack. These PRs retain their own domain/test findings, but none may count five-locale SPA-bundled predecessor evidence as completion of this eight-locale DB-ledger requirement. Keep conflicts and unique deltas repairable; do not close them merely because this shared presentation prerequisite is unfinished.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions