Skip to content

Complete macOS localization parity and validate plural catalogs - #12169

Merged
austinywang merged 61 commits into
mainfrom
issue-12075-complete-macos-localizations
Sep 11, 2026
Merged

austinywang merged 61 commits into
mainfrom
issue-12075-complete-macos-localizations

Conversation

@austinywang

@austinywang austinywang commented Sep 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Completes macOS localization across all six app/package catalogs for English, German, French, Arabic, Spanish, Traditional Chinese, Simplified Chinese, Korean, and Japanese. The main catalog has 6,326 unique keys. Existing values for the other 11 locales are retained.

  • Restore records that were outside strings, consolidate duplicate records without losing translations or translator notes, and retain newly merged upstream keys.
  • Complete translations and 115 count messages, including all six Arabic plural categories, French/Spanish many, and messages with multiple arguments.
  • Gate CI on catalog structure, required locale coverage, translated state, exact argument positions/types, plural leaves, newline counts, and unfinished markers. Invariant brand names, identifiers, formats, prices, and CLI syntax have exact, source-bound exemptions.
  • Keep translated settings-search aliases alongside English aliases, use consistent terminology, and synchronize the reviewed public error copy with its Swift/CLI fallbacks.
  • Merge main through 72bcbdc773, including its SSH decoder fix. The final PR retains shared SSH test helpers, corrected connection fixtures, deterministic push-cleanup test completion, and pricing assertions that accept localized units while checking the same plan quantities. No warning or complexity budget is raised.

Translation provenance: matching iOS translations were reused, and 4,192 Simplified Chinese entries were extracted by key and matching source from #12052. Credit to @mengyang0007-dev for those translations and the terminology table. Remaining drafts used Gemini, followed by source/placeholder/newline/literal-token validation and manual corrections. Incomplete drafts were rejected. Traditional Chinese uses Taiwan terminology; broad native-speaker approval is not claimed.

Closes #12075.

Testing

Revision: 73a49543ea1669af944eac900133fe17c2bead26.

  • All six macOS catalogs pass all nine required locales with zero parity errors. All 28 Python localization/structure/linter tests pass; the root linter passes all 19 discovered catalogs.
  • Catalog contents are unchanged since f62994c69f. On a leased Mac running macOS 26.5.1 and Xcode 26.3, compiled resources for those catalogs match 55,659 strings and 2,480 plural leaves. All 7,389 runtime formatting cases pass across nine locales, including zero, dual, large/million counts, and multiple count arguments.
  • Xcode normalization, wiring for 868 test files, package grouping, Package.resolved policy, and Cloud CLI skill coverage pass.
  • Web typecheck and complexity pass. 144 focused web cases pass locally. The PTY wrapper's local child-startup deadlines failed; the same untouched Python harness passes all five readiness, gate, exit, timeout, and cancellation/cleanup cases on the fleet Mac. Assertions and timeouts were not weakened.
  • Full CI is running on the current revision. Both German Settings navigation/search and Arabic Settings navigation/search with RTL layout pass (one selected test each). The harness now opens Settings after foreground activation, so the terminal window cannot cover the search field; all assertions and timeouts remain intact.
  • Focused SSH reconnection tests passed all 16 cases on e623cbb580; the subsequent commit only corrects a Settings search alias and the UI-test window-opening sequence.
  • 73a49543ea fixes the outstanding shortcut-hints search-alias comment. All 14 inline review threads are resolved; top-level policy/size-limit notices have documented dispositions.

Demo Video

The German and Arabic hosted runs above include test-recording artifacts. Their final UI sequences were visually inspected: translated Settings and German search results render, and Arabic places the sidebar on the right.

The current revision built successfully as l10n-12169-final on the shared fleet and installed locally. Remote verification confirmed the exact tagged bundle launches, answers its debug socket, and lists its terminal workspace. Its separate CUA screenshot step hit a provider-version mismatch (Unknown tool: screenshot); visual evidence comes from the successful hosted UI recordings. The initial local install ran out of disk space; obsolete same-tag artifacts were removed and the completed archive installed successfully on retry.

The build uses documented offline mode; account and network flows are not covered by this verification.

Checklist

  • Nine-locale catalog coverage, format/plural runtime checks, and project/package checks pass.
  • Focused web validation and unchanged PTY behavior checked.
  • Localization audit covers all six catalogs, required locale entries, state, argument types/positions, plural categories, newlines, and literal CLI/schema tokens.
  • Final-revision hosted checks entirely green.
  • Current tagged app launch/socket verified remotely; German/Arabic hosted UI recordings visually inspected.
  • Current actionable feedback addressed; 14 inline threads resolved.

Scope: website/iOS translation and pre-existing uncataloged English (including CLI help tracked by #9623) remain outside this issue. The final diff no longer changes iOS-only files. The requested master PR exceeded Bugbot's full-review size limit; incremental findings were addressed, but full automated-review coverage is not claimed. CodeRabbit reports its incremental review paused/skipped. The original per-locale commits keep the translations separately reviewable. The PR remains unmerged, pending user dogfood approval.


Note

Medium Risk
Very large user-visible string and catalog changes can regress formatting, plurals, or search behavior, though changes are mostly copy and validation rather than security or data paths.

Overview
This PR completes macOS localization for nine locales (en, de, fr, ar, es, zh-Hant, zh-Hans, ko, ja) across app and package Localizable.xcstrings catalogs, and locks it in with CI via tests/test_localization_catalog.py and scripts/localization_catalog.py check. Contributor docs now list the supported app locales explicitly.

User-facing copy is aligned with friendlier English fallbacks in Swift/CLI (CodeRouter/executable messages, diff viewer errors, simulator TCC readiness) and matching translated entries in module catalogs (e.g. CmuxBrowser, CmuxFeedback, CmuxSwiftRenderUI).

Settings search curated entries and section titles now use String(localized:) so palette search matches localized UI while keeping English aliases in synonyms.

Separate from l10n: SSH auth marker bootstrap scopes exec open errors so stderr is not permanently silenced; push registration and UserDefaults settings observation tests wait for deterministic completion instead of polling/timeouts.

Reviewed by Cursor Bugbot for commit 73a4954. Bugbot is set up for automated code reviews on this repo. Configure here.

@vercel

vercel Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cmux166 Ready Ready Preview Sep 11, 2026 2:29am UTC
cmux41 Ready Ready Preview Sep 11, 2026 2:29am UTC

@coderabbitai

coderabbitai Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds nine-locale macOS localization coverage, catalog validation and merge tooling, CI checks, updated localization guidance, user-facing copy updates, project ordering changes, and notification lifecycle regression tests.

Changes

MacOS localization parity

Layer / File(s) Summary
Catalog validator and plural metadata
scripts/localization-plurals.json, scripts/localization_catalog.py
Adds plural metadata and a CLI tool for catalog discovery, validation, extraction, merging, diagnostics, and atomic writes.
Catalog tests and CI enforcement
tests/test_localization_catalog.py, .github/workflows/ci.yml
Tests catalog structure, locale rules, placeholders, plurals, and merge behavior. CI runs the tests and parity check.
Application catalog translations
Packages/macOS/CmuxBrowser/..., Packages/macOS/CmuxFeedback/..., Packages/macOS/CmuxSwiftRenderUI/...
Adds supported-locale translations for diff viewer, feedback composer, and sidebar strings.
System catalog translations
Resources/InfoPlist.xcstrings, TunnelExtension/InfoPlist.xcstrings
Adds supported-locale entries for permission descriptions and the Cloud Tunnel display name. Refines existing permission translations.
Localization policy and workflow guidance
CLAUDE.md, skills/cmux-localization/SKILL.md, Packages/macOS/CmuxSimulator/Tests/CmuxSimulatorTests/SimulatorLocalizationCatalogTests.swift
Documents the nine supported locales and audit rules. Localization tests now check all supported locales.

Notification lifecycle regression coverage

Layer / File(s) Summary
Notification lifecycle regression tests
cmuxTests/AgentSemanticNotificationDeliveryTests.swift, cmuxTests/ClaudeHookLifecycleCleanupTests.swift
Verifies sibling notification preservation after pane moves, turn-specific clearing, journal payload fields, and the absence of clear_notifications commands.

Copy and project maintenance

Layer / File(s) Summary
User-facing error copy updates
CLI/CMUXCLI+ExecutableResolution.swift, Sources/AgentExecutableResolverError.swift, Sources/Panels/CodexAppServerSession.swift, Packages/macOS/CmuxBrowser/..., cmuxTests/CodexAppServerSessionTests.swift
Rewords executable resolution, diff viewer, and Codex error messages. Updates the related test expectation.
Xcode test file ordering
cmux.xcodeproj/project.pbxproj
Reorders three existing test entries alphabetically in project sections.

Priority: ➖ Normal

Estimated code review effort: 4 (Complex) | ~45 minutes

Severity of issue fixed: Medium

Sequence Diagram(s)

sequenceDiagram
  participant CI
  participant LocalizationCatalog
  participant XCStringsCatalogs
  CI->>LocalizationCatalog: run tests and parity check
  LocalizationCatalog->>XCStringsCatalogs: discover and validate catalogs
  XCStringsCatalogs-->>LocalizationCatalog: entries, placeholders, and locale states
  LocalizationCatalog-->>CI: diagnostics and exit status
Loading

Merge Risk: 🔵 Low · up to b2879

The new localized diff-viewer errors may use inconsistent terminology within Chinese and Korean UI. Align the terms before merge to keep the translated experience consistent.


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (2 errors, 2 warnings)

Check name Status Explanation Resolution
Cmux User-Facing Error Privacy ❌ Error The PR adds production translations for user-facing errors that expose prohibited implementation details. Resources/Localizable.xcstrings adds German, French, Arabic, Spanish, Traditional Chinese, S… Replace the affected user-visible error and recovery text in every newly supported locale, and update the corresponding default English text where needed, to use cmux/product terms only. For example, report that browser-history import, simu…
Cmux Full Internationalization ❌ Error FAIL: The PR changes catalog records but does not provide translated entries for every locale already supported by those catalogs. In Resources/Localizable.xcstrings, changed records such as `cli.cl… Add translated, non-needs_review, non-copied-English entries for every locale already present in each touched catalog for every changed or added record, including the 11 legacy locales in Resources/Localizable.xcstrings, the existing le…
Out of Scope Changes check ⚠️ Warning The pull request includes unrelated notification and hook-lifecycle regression tests, plus project-file ordering changes. These changes are outside the localization objectives in issue #12075, which l… Remove the unrelated notification and hook-lifecycle test changes and unrelated project-file reordering, or link them to a separate issue and split them into another pull request. Retain only changes required for localization parity, valida…
Docstring Coverage ⚠️ Warning Docstring coverage is 6.15% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 65 functions across 13 files. (2 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (21 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes address issue #12075 by adding nine-locale catalog coverage, plural and placeholder validation, localization tooling, tests, documentation updates, and preservation checks for out-of-scope…
Cmux Swift Actor Isolation ✅ Passed PASS. The Swift diff does not introduce or worsen actor-isolation issues. Production changes only replace localized fallback strings in CMUXCLI+ExecutableResolution.swift, `AgentExecutableResolverEr…
Cmux Swift Blocking Runtime ✅ Passed PASS: The diff from origin/main adds no blocking or timing-based synchronization to production Swift. The four changed production Swift areas only revise localized error strings. AST searches found no…
Cmux Browser Automation Off-Main ✅ Passed PASS: The PR does not change browser socket automation routing. Against origin/main, the only changed paths under Packages/macOS/CmuxBrowser are DiffViewer/CmuxDiffViewerSessionError.swift and i…
Cmux Expensive Synchronous Load ✅ Passed The PR adds no expensive synchronous agent-history load. The only non-test Swift changes update localized fallback strings in four files, including existing @MainActor CodexAppServerSession; they …
Cmux Cache Substitution Correctness ✅ Passed PASS. The diff contains no TypeScript or JavaScript changes. The changed production Swift lines only update localized error/default strings in CMUXCLI+ExecutableResolution.swift, `CmuxDiffViewerSess…
Cmux No Hacky Sleeps ✅ Passed PASS: The pull request adds a Python localization validator and test suite, plus GitHub Actions steps. The changed Python files contain no sleep, timer, polling, retry/backoff, delayed-dispatch, or wa…
Cmux Algorithmic Complexity ✅ Passed No algorithmic-complexity failure was introduced. The changed Swift production files only update localized message text. The new catalog tool processes catalogs with a linear pass over entries and the…
Cmux Swift Concurrency ✅ Passed PASS. The pull request introduces no prohibited Swift concurrency pattern. The changed Swift production lines only update localized fallback strings. The new Swift test adds synchronous assertions and…
Cmux Swift @Concurrent ✅ Passed PASS. The Swift diff changes only localized fallback text, locale assertions, and test assertions. The added notification regression test is synchronous. No added line introduces @concurrent, `nonis…
Cmux Swift Package Boundaries ✅ Passed PASS. The production Swift diff changes only localized fallback strings in CLI/CMUXCLI+ExecutableResolution.swift, Sources/AgentExecutableResolverError.swift, `Sources/Panels/CodexAppServerSession…
Cmux Swiftpm Lockfiles ✅ Passed No SwiftPM lockfile policy violation is introduced. Compared with origin/main, the PR changes no Package.swift, Package.resolved, or .gitignore file. The cmux.xcodeproj change only reorders three test…
Cmux Swift Logging ✅ Passed PASS. The PR diff adds no print, debugPrint, dump, NSLog, ad hoc file logging, or Logger declarations in production Swift. The changed outputSink("stderr", ...) line only changes user-facing…
Cmux Swiftui State Layout ✅ Passed PASS: The pull request introduces no SwiftUI state or layout changes. The diff against origin/main changes only localized fallback strings and test assertions in Swift files. Structural outlines sho…
Cmux Architecture Rethink ✅ Passed PASS. The usable PR diff adds no Swift architecture change that violates the rule. Production Swift edits only change localized fallback text. The new Swift behavior is test-only coverage and uses exi…
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS — The PR changes eight Swift files only for localized error text and test coverage. The diff adds or modifies no NSWindow, NSPanel, NSWindowController, SwiftUI Window, WindowGroup, close-shortcut…
Cmux Source Artifacts ✅ Passed PASS: The diff contains no local tool output, logs, screenshots, recordings, temp directories, caches, build output, dependency checkouts, or other artifact paths. Changed files are source/configurati…
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS. The diff touches three production Sources Swift files: Packages/macOS/CmuxBrowser/Sources/CmuxBrowser/DiffViewer/CmuxDiffViewerSessionError.swift, `Sources/AgentExecutableResolverError.swift…
Cmux No Ambient Global State ✅ Passed PASS — The PR's changed production Swift files are limited to localized defaultValue string replacements in CLI/CMUXCLI+ExecutableResolution.swift, `Packages/macOS/CmuxBrowser/Sources/CmuxBrowser/…
Title check ✅ Passed The title clearly and concisely describes the main changes: completing macOS localization parity and adding plural catalog validation.
Description check ✅ Passed The description is mostly complete. It includes a summary, testing details, demo evidence, scope, and checklist status. It does not include the template's Review Trigger section and does not reproduce…
Full details: Out of Scope Changes check

Explanation

The pull request includes unrelated notification and hook-lifecycle regression tests, plus project-file ordering changes. These changes are outside the localization objectives in issue #12075, which limit scope to catalog, tooling, documentation, and focused localization-related project changes.

Resolution

Remove the unrelated notification and hook-lifecycle test changes and unrelated project-file reordering, or link them to a separate issue and split them into another pull request. Retain only changes required for localization parity, validation, documentation, and directly related localized error fallbacks and tests.

Full details: Docstring Coverage

Explanation

Docstring coverage is 6.15% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 65 functions across 13 files. (2 skipped: 2 unsupported.)

Full details: Cmux User-Facing Error Privacy

Explanation

The PR adds production translations for user-facing errors that expose prohibited implementation details. Resources/Localizable.xcstrings adds German, French, Arabic, Spanish, Traditional Chinese, Simplified Chinese, and Korean values for browser.import.warning.noHistoryDatabase (database details) and simulator.failure.tccUnavailable (the TCC database). It also adds snapshot terminology to terminal.restore.no_snapshot and cli.simulator.error.accessibilityMissing. These keys are emitted by Sources/Panels/BrowserPanel.swift, Packages/macOS/CmuxSimulator/Sources/CmuxSimulatorWorker/Privacy/SimulatorPrivatePrivacyAdapter+TCC.swift, Sources/TerminalController+ControlSystemContext.swift, and Sources/TerminalController+ControlSimulatorOperationPayloads.swift. The PR also localizes CLI error output that names environment variables, including cli.coderouter.bootstrap.installedNotFound and cli.socket.error.conflictingEnvironment; these are errors, not advanced help text. The changed diff-viewer messages are appropriately generic, but the added catalog entries still introduce the listed violations.

Resolution

Replace the affected user-visible error and recovery text in every newly supported locale, and update the corresponding default English text where needed, to use cmux/product terms only. For example, report that browser-history import, simulator permissions, session restore, or accessibility retrieval failed and provide a safe retry or wait action. Do not mention database names, snapshots, TCC, PATH, CMUX_SOCKET_PATH, CMUX_SOCKET, or other environment variables in errors. Keep such implementation details in sanitized logs or developer-only diagnostics. Re-run the localization parity and catalog checks after updating all affected records.

Full details: Cmux Full Internationalization

Explanation

FAIL: The PR changes catalog records but does not provide translated entries for every locale already supported by those catalogs. In Resources/Localizable.xcstrings, changed records such as cli.claude-hook.notification.body.error omit bs, da, it, km, nb, pl, pt-BR, ru, th, tr, uk; agentSession.codex.error.rpcFailed leaves those locales in needs_review with copied English. Resources/InfoPlist.xcstrings changes NSAppBundlesUsageDescription but omits existing bs, da, it, nb, pl, pt-BR, ru, th, tr. The feedback catalog changes records while omitting its existing uk entry translations. This directly violates .github/review-bot-rules/full-internationalization.md lines 8–12 and 17. The changed Swift messages do use String(localized:defaultValue:), and the nine-locale package catalogs do not add a separate failure.

Resolution

Add translated, non-needs_review, non-copied-English entries for every locale already present in each touched catalog for every changed or added record, including the 11 legacy locales in Resources/Localizable.xcstrings, the existing legacy locales in Resources/InfoPlist.xcstrings, and uk in the feedback catalog. Preserve matching placeholders and update the catalog entries for all changed Swift defaults.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-12075-complete-macos-localizations

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@blacksmith-sh

This comment has been minimized.

@blacksmith-sh

This comment has been minimized.

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread cmuxUITests/SettingsAppBehaviorUITests.swift
Comment thread cmuxUITests/SettingsAppBehaviorUITests.swift

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

There are 3 total unresolved issues (including 2 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d763299. Configure here.

@austinywang
austinywang merged commit 3774a64 into main Sep 11, 2026
51 of 52 checks passed
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 11, 2026
72ce5e9 Merge pull request manaflow-ai#12210 from manaflow-ai/issue-12204-inactive-pane-colors
39bbf00 feat(web): add Founding Chromium Engineer role to jobs page (manaflow-ai#12248)
a34d44c devbox: promote sh-cd099a44912648399e0420df9b4e7f4f (daemon 897bb7a, theme-portable attach) (manaflow-ai#12304)
021537a fix: keep main windows out of fullscreen tiling (manaflow-ai#12298)
24125c7 test: update managed appearance snapshots for Catppuccin
a5a3c0f fix: match fallback colors to managed Catppuccin themes
c042f83 test: cover Catppuccin colors without theme resources
4916e7c test: use authoritative scrollbar response in wheel regression
3774a64 Complete macOS localization parity and validate plural catalogs (manaflow-ai#12169)
897bb7a Cloud panes: keep the local Ghostty theme on attach (manaflow-ai#12259)
cde2e36 web: drop the status read after Freestyle create and warm the database during auth (manaflow-ai#12260)
18e6282 Merge pull request manaflow-ai#12295 from manaflow-ai/fix/codex-default-theme-compositing
fe2292b fix: align managed terminal defaults with Codex theme
27bbb39 test: require the Codex Catppuccin default theme
84283f4 fix: size terminal frames from the tiled clip viewport
caee136 fix: keep portal terminal contents clipped during resize
454bd7a fix: preserve inactive terminal colors by default
e577aa7 test: cover inactive split appearance defaults

# Conflicts:
#	.github/workflows/ci.yml
aerickson pushed a commit to aerickson/cmux that referenced this pull request Sep 13, 2026
…flow-ai#12169)

* Add macOS localization parity tooling

* Preserve catalog formatting and record translation metadata

* Add failing regression coverage for catalog plural validation

* Validate source arguments and every translated plural leaf

* Cover ignored catalog records and locale-specific shared spellings

* Restore ignored catalog records and reuse verified locale data

* Cover lost line breaks in translated format strings

* Preserve translation line breaks and require feature locale parity

* Cover legitimate todo wording and package invariant policy

* Cover parity and lossless merging of duplicate catalog records

* Limit shared-spelling plural exceptions to approved leaf text

* Validate duplicate records and narrowly scoped plural spellings

* Complete English macOS catalog entries and plural forms

* Complete German macOS catalog entries and plural forms

* Complete French macOS catalog entries and plural forms

* Complete Arabic macOS catalog entries and plural forms

* Complete Spanish macOS catalog entries and plural forms

* Complete Traditional Chinese macOS catalog entries and plural forms

* Complete Simplified Chinese macOS catalog entries and plural forms

* Complete Korean macOS catalog entries and plural forms

* Complete Japanese macOS catalog entries and plural forms

* Document locale terminology, count arguments and reviewed literals

* Translate the cloud networking strings added on main

* Fix the macOS warnings blocking localization CI

* Cover nested duplicate locale and substitution members

* Address localization review wording and nested duplicate validation

* Align moved-pane notification regressions with journal ownership

* Use product-focused diff viewer errors in every macOS locale

* Clarify localized agent errors without internal implementation wording

* Normalize Xcode project entries brought in by main

* Address diagnostic copy and keep the master PR focused on localization

* Make lane selection deterministic and refresh SSH startup test behavior

* fix: keep SSH startup payload within argv limit

(cherry picked from commit 79edb6f)

* Preserve startup exit status and update SSH integration fixtures

* Share SSH artifact decoding and correct Arabic completion labels

* Join push cleanup before asserting durable store removal

* Use formal German feedback send action

* Use natural German feedback button label

* Translate new terminal creation messages across locales

* Make retry policy chunk assertions deterministic

* Keep retry cooldown assertion outside sleep callback

* Fix web test typings and respect the PTY harness deadline

* Consolidate catalog duplicates and refresh translated plan limits

* Remove ambiguous duplicate permission catalog records

* Preserve cloud workspace guidance and Bun mock overload after merge

* Test localized Settings navigation and search in German and Arabic

* Test stderr preservation during marked SSH authentication

* Localize Settings navigation and fix SSH retry and reconnect regressions

* Align hosted regression harnesses with control types and cleanup contracts

* Correct shortcut hints search alias and localized Settings test focus

---------

Co-authored-by: lawrencecchen <54008264+lawrencecchen@users.noreply.github.com>
aerickson pushed a commit to aerickson/cmux that referenced this pull request Sep 13, 2026
…flow-ai#12169)

* Add macOS localization parity tooling

* Preserve catalog formatting and record translation metadata

* Add failing regression coverage for catalog plural validation

* Validate source arguments and every translated plural leaf

* Cover ignored catalog records and locale-specific shared spellings

* Restore ignored catalog records and reuse verified locale data

* Cover lost line breaks in translated format strings

* Preserve translation line breaks and require feature locale parity

* Cover legitimate todo wording and package invariant policy

* Cover parity and lossless merging of duplicate catalog records

* Limit shared-spelling plural exceptions to approved leaf text

* Validate duplicate records and narrowly scoped plural spellings

* Complete English macOS catalog entries and plural forms

* Complete German macOS catalog entries and plural forms

* Complete French macOS catalog entries and plural forms

* Complete Arabic macOS catalog entries and plural forms

* Complete Spanish macOS catalog entries and plural forms

* Complete Traditional Chinese macOS catalog entries and plural forms

* Complete Simplified Chinese macOS catalog entries and plural forms

* Complete Korean macOS catalog entries and plural forms

* Complete Japanese macOS catalog entries and plural forms

* Document locale terminology, count arguments and reviewed literals

* Translate the cloud networking strings added on main

* Fix the macOS warnings blocking localization CI

* Cover nested duplicate locale and substitution members

* Address localization review wording and nested duplicate validation

* Align moved-pane notification regressions with journal ownership

* Use product-focused diff viewer errors in every macOS locale

* Clarify localized agent errors without internal implementation wording

* Normalize Xcode project entries brought in by main

* Address diagnostic copy and keep the master PR focused on localization

* Make lane selection deterministic and refresh SSH startup test behavior

* fix: keep SSH startup payload within argv limit

(cherry picked from commit 79edb6f)

* Preserve startup exit status and update SSH integration fixtures

* Share SSH artifact decoding and correct Arabic completion labels

* Join push cleanup before asserting durable store removal

* Use formal German feedback send action

* Use natural German feedback button label

* Translate new terminal creation messages across locales

* Make retry policy chunk assertions deterministic

* Keep retry cooldown assertion outside sleep callback

* Fix web test typings and respect the PTY harness deadline

* Consolidate catalog duplicates and refresh translated plan limits

* Remove ambiguous duplicate permission catalog records

* Preserve cloud workspace guidance and Bun mock overload after merge

* Test localized Settings navigation and search in German and Arabic

* Test stderr preservation during marked SSH authentication

* Localize Settings navigation and fix SSH retry and reconnect regressions

* Align hosted regression harnesses with control types and cleanup contracts

* Correct shortcut hints search alias and localized Settings test focus

---------

Co-authored-by: lawrencecchen <54008264+lawrencecchen@users.noreply.github.com>

This branch was successfully deployed

2 active deployments
Preview – cmux41 — 73a49543 Deployed Sep 11, 2026 by vercel[bot]
Preview – cmux166 — 73a49543 Deployed Sep 11, 2026 by vercel[bot]
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.

macOS app: complete de/fr/ar/es/zh-Hant/zh-Hans/ko localizations to parity with English and Japanese (iOS parity)

2 participants