Skip to content

i18n: Italian - #36

Merged
callumalpass merged 6 commits into
mainfrom
feat/i18n-italian
Oct 26, 2026
Merged

callumalpass merged 6 commits into
mainfrom
feat/i18n-italian

Conversation

@callumalpass

@callumalpass callumalpass commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Stack Italian on feat/i18n (b353683b); merge translator i18n/writer-it (58f7ac3), all 658 messages, plus locally generated strict JSON.
  • Adopt SHA-256-verified Italian kit/UI 49bea0aa tarballs and refresh only their lockfile entries. Italian is lazy-loaded; shared preset/runtime/picker provide it / Italiano, OS negotiation and persistence.
  • Review 21 identical terms (17 shortcut legends, Editor, Word/DOCX, two Italian in fragments); no English prose allowlisted, placeholders, padding, or weakened gates.
  • Preserve the cross-remount phrase cache unchanged; extend real-runtime keyed-remount coverage to Italian and the regular browser i18n suite to Italian picker, negotiation, persistence, plurals, dates/numbers, and CodeMirror.

Verification

  • rpnpm check: all ten locales strict, shared UI --compose, CLDR plural contracts, source guard (87 modules), typecheck, full tests 692 passed / 7 existing skips.
  • rpnpm build:production and rpnpm --filter @mdbase-writer/app build:editing-test.
  • Local pnpm i18n:compile; committed generated JSON; all ten app catalogues 658 IDs / shared UI 197 IDs.
  • Regular local Playwright i18n harness: Italiano picker, it-IT negotiation, persistence/reload, Italian zero/one/other word/comment plurals, date/number/relative time, Trova, unchanged manuscript; existing ja/de/zh and failed-chunk checks retained. Italian wide/narrow screenshots inspected.
  • Original unchanged chapter scroll/history/selection scenario: 10/10 fresh Italian contexts, original <2px anchor tolerance, no retries. Unit regression also proves synchronous target phrases/no deferred remount dispatch.
  • Full local browser reliability suite also passed (24 scenarios).
  • Exact-head GitHub CI SUCCESS, watched to completion: run 40093309198, head c7ee59765fd35c75c5f75d4c879fdb1f96e472c0, 7m19s. Generated-catalogue drift, full check/build, real-canvas production editing, baseline/reliability/i18n browser suites and private-feedback checks all passed; no pending checks.

Integration note / remaining blocker

Before merge, replace both vendored @mdbase-dev/i18n and @mdbase-dev/ui tarballs with published package versions after the coordinated Connect release, refresh the lock and rerun gates. This PR stays draft. Writer is a web app, so the plugin's 5,000,000-byte budget is not applicable.

No main push/merge, tag, deploy, publish, settings/secrets changes, canonical checkout edits or subagents. Demo/browser acceptance is not native-device or production-export qualification. Detailed evidence: docs/translations.md and initiative burst/status/italian-writer.md.

…languages

- Encode backslashes in string interpolation values in the app's Lingui
  singleton. Lingui 6.9 decodes \xNN/\uNNNN after interpolation, so paths,
  titles and LaTeX such as C:\x41dir displayed as C:Adir in every locale.
- Render user and authority strings (paths, filters, titles, signer and
  collection names, preview/save/source problems) with plain t, or as a React
  child via literal() where the message contains components, so React
  Lingui's rich-text parser no longer reinterprets <0/> or <b> in them.
  Translations are retained; three messages only renumber a placeholder.
- Key the conflict comparison panes by side rather than translated label,
  so a language change no longer remounts them and loses the scroll to the
  changed passage.

Regression tests: apps/writer/src/i18n/data-boundary.test.tsx.
The kit's createI18nRuntime now encodes backslashes in interpolated values
once per I18n instance. Writer's runtime passes the shared UI singleton
through it, so keeping the app wrapper encoded twice and showed `\` as
`\`. Swap both vendored tarballs to 24e9f5d0, remove the wrapper and
its call-form unit test, and keep the user-facing regressions with an
explicit single-encoding assertion.
@callumalpass
callumalpass changed the base branch from feat/i18n to main October 26, 2026 09:22
@callumalpass
callumalpass marked this pull request as ready for review October 26, 2026 09:22
@callumalpass
callumalpass merged commit 2159505 into main Oct 26, 2026
1 check passed
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