Skip to content

M10: localize Windows and macOS installers using the system language - #1101

Open
lukashold wants to merge 25 commits into
storytold:mainfrom
lukashold:codex/installer-languages
Open

lukashold wants to merge 25 commits into
storytold:mainfrom
lukashold:codex/installer-languages

Conversation

@lukashold

@lukashold lukashold commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

PdfCraft's interactive Windows Setup and macOS PKG select installation text from the user's primary display language, with English for an unsupported language. The offline Windows Setup embeds one MSI and its language transforms. Hot Folder remains an optional, default-off component.

The 19 catalogs cover English, German, French, Spanish, Dutch, Italian, Hungarian, Simplified Chinese, Traditional Chinese, Hindi, Arabic, Bengali, Portuguese, Russian, Indonesian, Urdu, Japanese, Korean and Turkish. Chinese regional/script variants select the appropriate script; Arabic and Urdu use native RTL attributes and mirrored dialog controls. Operating-system authentication prompts remain supplied by the OS.

The shared catalog inventory drives language builds, 18 embedded transforms and Burn selection. Translated MSI variants retain the same ProductCode, payload and feature defaults. macOS keeps translated resources and generates English fallback resources for unsupported primary languages. Catalog provenance is recorded in ATTRIBUTION.toml.

Deployment documentation covers silent per-machine installation, language transforms/LANGIDs, optional Hot Folder, logging, reboot handling, exit codes and GPO deployment. It distinguishes GPO's external-transform list from embedded-transform command-line deployment and does not place service-account credentials in MSI properties.

Validation at 67108c6: all five jobs in Installer languages #11 pass:

  • Real WiX 5.0.2 MSI/Setup fixtures for x86, x64 and ARM64: all 19 catalogs, Unicode codepages, exact compiled dialog strings, RTL geometry, identity and opt-in metadata, offline payload hashes and all 65,536 language IDs.
  • Native macOS PKG/Foundation locale resolution, including regional and unsupported-primary-language cases.
  • Eighteen actual MSI preview windows on Windows Server 2025: six dialogs each in Hindi, Bengali and Urdu. All 66 text-bearing controls pass exact Unicode text, expected Win32 class, process/window identity, uniqueness, visibility and bounds checks. The retained JSON report records every dialog. The guarded test runs no installation sequence and activates no controls.

Catalog/placeholder checks, PowerShell 5/7 parsing, actionlint, ShellCheck and asset checks also pass. Windows Installer has limited UTF-8 codepage support; Hindi, Bengali and Urdu use UTF-8 UI text with ANSI SummaryInformation. Native text/geometry tests do not qualify checkbox state, Invoke/Toggle interaction, pixel-level shaping or every font/DPI configuration. Real AD/GPO rollout and certificate-backed signing remain unqualified.

Stacked on #1063. Localization-only comparison. The service-path quoting fix is included. The separate real-MSI Server 2022/2025 acceptance run passes installation, OCR, crash recovery and authenticated SMB/outage cases but currently fails in the test-generated upgrade fixture; complete server acceptance is still pending. Windows Server 2019 also needs a suitable disposable runner.

lukashold and others added 25 commits October 11, 2026 06:59
Recognize English, German, French, Spanish and horizontal Japanese locally. Correct quarter-turn orientation and skew before OCR, preserve scan streams, and write searchable Unicode text with undo and stale-result protection.

Co-authored-by: Codex <noreply@openai.com>
Add conservative paper-edge detection and adjustable safety padding to scan enhancement, shared with OCR and alignment. Preserve existing text and original scan streams with undo. Ignore scanner frames during deskew analysis, and cover rotated/off-origin crops and combined OCR geometry with synthetic tests.

Integrate main through bbbe600 and refresh translation asset hashes.

Co-authored-by: Codex <noreply@openai.com>
Expose Italiano in the shared language list and derive both automation schemas from it. Cover all six Italian accented vowels through real-model OCR, save/reopen and unchanged scan pixels, plus UI selection and single/batch automation.

Requested by @magdale76 in storytold#1012. Validated with 2,147 passing tests including the corrected UI selector and the existing Windows update-test filename workaround; the existing symlink test requires unavailable privileges and remains skipped.

Co-authored-by: Codex <noreply@openai.com>
Fold Dutch, Danish, Norwegian Bokmål, Swedish, Finnish and Portuguese into the existing OCR language list following @mlkonrad's comparison in storytold#1012. Keep the shared model unchanged; leave Icelandic unclaimed. Add real-model save/reopen checks for accented words in all six languages.

Default the OCR picker to the primary OS/browser locale, independently of available UI translations, with English fallback. Preserve manual document-language choices and deterministic automation defaults. Cover locale variants, unsupported locales and UI selection.

Validation: 2,149 tests passed; seven pre-existing ignored and one Windows symlink-privilege test skipped. Four update tests passed under a neutral executable filename due to Windows installer detection. Format, strict workspace Clippy, 30 WASM crates, layers, assets and parity passed. German OCR dialog rendered and inspected.

Co-authored-by: Codex <noreply@openai.com>
Add scheduled OCR tasks, durable source/output recovery, seven task-manager languages and optional boot services with platform installers.

Co-authored-by: Codex <noreply@openai.com>
Satisfy the existing cargo-deny wildcard policy without changing dependency resolution. Full dependency audit and workspace tests pass.

Co-authored-by: Codex <noreply@openai.com>
…tallers

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: OpenAI Codex <noreply@openai.com>
Preserve zero/one/many CLI scripts and object reports with -InputObject, with a regression and optional real read-only CLI smoke.
Keep the test settings compatible with standalone Hot Folder, fail on modified or removed originals, and include final MSI checksums in release artifacts.
Cover the actual Server acceptance registration with a no-space executable and quoted configuration path, while rejecting extra arguments and mismatched paths.

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Reuse the CI console instead of hiding the child process's first window. Retain Unicode, title and bounds assertions and the hosted-runner execution guard.
…ilures

Return a single validated ProductCode and release every dependent COM object before msiexec. Cover actual synthetic MSI databases, exclusive reopening, malformed identifiers and cleanup error precedence without installing on the development host.

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>

This branch has not been deployed

No deployments
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