Repository navigation
Complete macOS localization parity and validate plural catalogs - #12169
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds 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. ChangesMacOS localization parity
Notification lifecycle regression coverage
Copy and project maintenance
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
Merge Risk: 🔵 Low · up to 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 failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (2 errors, 2 warnings)
✅ Passed checks (21 passed)
Full details: Out of Scope Changes checkExplanation 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 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 CoverageExplanation 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 PrivacyExplanation The PR adds production translations for user-facing errors that expose prohibited implementation details. 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, Full details: Cmux Full InternationalizationExplanation FAIL: The PR changes catalog records but does not provide translated entries for every locale already supported by those catalogs. In Resolution Add translated, non-
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
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. Comment |
|
All contributors have signed the CLA ✍️ ✅ |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
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).
❌ 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.
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
…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>
…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>

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.
strings, consolidate duplicate records without losing translations or translator notes, and retain newly merged upstream keys.many, and messages with multiple arguments.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.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.e623cbb580; the subsequent commit only corrects a Settings search alias and the UI-test window-opening sequence.73a49543eafixes 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-recordingartifacts. 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
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 packageLocalizable.xcstringscatalogs, and locks it in with CI viatests/test_localization_catalog.pyandscripts/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
execopen 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.