Skip to content

feat(i18n): refresh Turkish localization and verify Windows UI - #31316

Closed
trugurpala wants to merge 14 commits into
stablyai:mainfrom
trugurpala:contribute/turkish-windows
Closed

trugurpala wants to merge 14 commits into
stablyai:mainfrom
trugurpala:contribute/turkish-windows

Conversation

@trugurpala

@trugurpala trugurpala commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

ELI5

This picks up the existing Turkish translation and fills in the strings added since then. It also fixes a practical problem: when a command is shown in Turkish, searching for its Turkish name should find it. “Dosyaya Git” and “ileri” now do.

What Changed

Thanks to @merttopuz for the original locale and README in #22200, and @mehmetefeaytas for the catalog refresh. Their nine commits and authorship are preserved. My part here is refreshing the catalog, fixing localized search and menus, and checking the result on Windows.

  • Sync the Turkish work to upstream ae58ca06d675396ca9e958d144607e2195c6fd95. Add 1,801 missing entries, refresh 56 changed-source translations and remove 228 retired entries. Add the current Chat shortcut/group: 16,846/16,846 catalog keys, no missing keys or placeholder mismatches.
  • Update the Turkish README against current upstream links/features; preserve the original locale registration, lazy loading, shortcut localization and document-language changes.
  • Search translated shortcut titles/groups from both Settings navigation and the local shortcut filter. Handle Turkish dotted/dotless I while retaining English names and keywords.
  • Translate native menu roles when a catalog provides a label; preserve Electron's native defaults for other partial catalogs and the existing localized callback-backed macOS Quit action.
  • Preserve upstream paste routing, host Quit callbacks and platform accelerators during conflict resolution.
  • Add regression coverage and real hidden Windows Electron UI tests at 1280×800 and 1024×768. Clarify the Turkish composer hint so @ means referencing a file, not uploading an attachment.

Why

The existing Turkish branches predate new screens and currently conflict with main. Updating that work retains its authorship while closing current catalog gaps. Localized command names also need to be searchable; explicitly labeling native menu roles must not turn other supported languages back into English.

This branch is offered as an updated continuation; maintainers can choose how to integrate it with #22200.

Linked Issue

Fixes #22228

Visual Proof

Original feature before/after evidence is preserved in @merttopuz's screenshots.

The screenshots below were captured from the real Windows Electron E2E runs and visually inspected. The English/Turkish comparison uses the same build at 1024×768, before and after changing language; it is not a separately built upstream baseline. Long labels retain the existing ellipsis behavior, and the narrow shortcut layout uses vertical scrolling.

English appearance — 1024×768 Turkish appearance — 1024×768
English appearance Turkish appearance

Turkish shortcut search: “ileri” — 1280×800. Both matching forward-navigation commands are shown.

Turkish forward shortcut search

Turkish shortcut search: “incel” — 1024×768, scrolled. Both matching review commands are shown in the narrow layout.

Turkish review shortcut search in narrow layout

All four images are attached to GitHub; no screenshot files were added to the source tree. Full-suite and CI limitations remain documented below.

Testing

  • Manual interaction testing (the local UI checks below were automated; screenshots were visually inspected)
  • Automated tests added/updated

Actual UI interactions were automated with Playwright against a real Windows Electron process, followed by visual inspection of the screenshots. No manual foreground desktop test is claimed.

Passed locally on Windows, Node 24.19.0, pnpm 12.14.0, Electron 43.7.8 and pinned Bun 1.4.3:

  • 258 passed, 1 platform-dependent skipped across 23 focused i18n, shared locale, menu, Settings search and dashboard-disclosure test files.
  • 2 Windows E2E tests passed at 1280×800 and 1024×768: language selection, Turkish navigation, local ileri/incel search, global Dosyaya Git, Ctrl hints, translated native roles and zero visible test windows. ORCA_BACKGROUND_LAUNCH=1 was used throughout.
  • Full pnpm lint and pnpm typecheck; main-process type checking repeated after the last menu fix. Existing documentation-site warnings remain, with no lint errors. Pre-commit lint, React checks and formatting passed.
  • Electron build in E2E mode and the bundled CLI build.
  • Localization catalog, extraction/coverage and README-link checks. Catalog validation was repeated after the final composer-wording correction.

Coverage limits: native macOS/Linux GUI, live SSH and mobile-device flows were not run. macOS/Linux menu flags are exercised by unit tests, which is not native OS execution. The earlier screenshots precede only the final composer-hint wording correction; that text is not visible in those screens. Full-repository commands were attempted in the checklist verification below; targeted-test results must not be read as a full-suite pass.

Catalog coverage is not a claim of perfect linguistic quality. A final contextual language sample covered 302 entries, including all 56 changed-source translations; it found and corrected the file-mention hint. The 1,801 added entries were also reviewed for terminology, placeholders, markup and inline command syntax.

Separate Windows installation check — October 21, 2026

I also set up commit 32503650d42ce7ba19552f8523d954817a95aa71 in a separate local folder and profile, alongside the existing Orca installation.

  • Re-ran the three focused locale/catalog test files: 19 passed.
  • Re-ran both Turkish Electron E2E cases: 2 passed, at 1280×800 and 1024×768. These cover language selection, Turkish Settings and shortcut searches, Ctrl hints and native menu labels.
  • Built the normal desktop app and launched it twice. Turkish stayed selected after restarting, and the native menus read Dosya, Düzenle, Görünüm, Pencere, Yardım.
  • Checked that this copy used its own home and user-data directories. The installed Orca executable and app.asar hashes were unchanged.
  • The native-module capability checks and bundled CLI build also passed.

For reproducibility: these E2E runs used the existing test cases and fixtures with a local config that skips the global build step, because the app had already been built separately. The standalone copy also uses a local bootstrap wrapper to isolate Electron's Windows paths. Those installation-only changes are not part of this PR, and the translation sources were unchanged.

This was a source build whose package version is 1.4.214, tested alongside the installed 1.4.235 release. It is not a signed installer or a rebase onto that newer release. These additional checks did not exercise signed-in agent workflows or the full repository test/release-packaging suites.

Checklist verification — October 21, 2026

Rechecked the published source tree 0b3c0410c06ac0cf81754e03f9e5a06518019641 (PR head 32503650d42ce7ba19552f8523d954817a95aa71). No product sources or lockfiles were changed during this verification.

Check Observed result
Full pnpm lint Exit 0; existing documentation warnings remain. The catalog check again reports 16,846/16,846 Turkish entries, 0 missing.
Full pnpm typecheck Passed as the first stage of the complete pnpm build command.
Full pnpm build Exit 0, including WSL bundles, CLI, Electron production assets, web client, mobile web bundle verification and Windows native helpers. This is a build, not a signed installer or a native mobile-device test.
All eight test files changed by this PR 104 passed, 1 skipped; 8 files passed, rerun on Windows. This supplements the earlier 23-file/258-test run.
Full pnpm test Not passing on this Windows host. The broad run produced failures and was interrupted; no complete-suite totals are claimed. A focused reproduction below exits 1 because /bin/sh is absent. The 57 observed failing files were subsequently compared with the upstream base; see the review-readiness follow-up below.
GitHub CI Five workflows await maintainer approval; no CI pass is claimed. PR Checks run.

The first build attempt found the missing separate mobile/ install; it was installed with pnpm install --frozen-lockfile. The next attempt reached the Windows native stage and found Cargo missing. Rust 1.99.1 was installed in an isolated local tooling directory, and the entire build command was then rerun successfully. Bun 1.4.3 and Cargo were made available on that command's PATH.

Reproduction of one full-suite blocker:

pnpm test src/main/managed-server/install/orcad-remote-shell-commands.integration.test.ts --bail=1
Error: ENOENT: no such file or directory, uv_spawn '/bin/sh'
Test Files  1 failed (1)
Process exit: 1

The POSIX integration test, its relevant remote-launch/snapshot modules and the test runtime configuration are unchanged from the upstream base. This establishes the environment cause of this reproduced failure; it does not establish the causes of every other full-suite failure. I have not weakened, removed or marked failing tests as skipped to make the checklist green.

Review evidence: Turkish search regression tests, native-menu fallback, paste and platform tests, catalog regression tests, and real Windows E2E cases. The patch adds no runtime dependency, credential, permission, IPC channel or protocol field. Remote/mobile compatibility review is a source review; native macOS/Linux, live SSH and mobile-device execution remain untested.

Review-readiness follow-up — October 21, 2026

The 57 files observed failing in the interrupted full-suite run were rerun to completion on both this PR and the pre-contribution upstream base ae58ca06d675396ca9e958d144607e2195c6fd95. Both runs returned 1,760 passed, 590 failed, 6 skipped. All 590 failing test identities and all 57 file statuses match; there are zero PR-only failures in this observed set. Complete reproduction method and per-file comparison.

A fresh localization/menu/Settings-search/dashboard selection passed: 23 files, 256 tests passed, 1 skipped, zero failed. This is a separate explicitly listed selection from the earlier 258-test run. The published source tree is unchanged; no tests were weakened or skipped to make this result green.

The observed failures therefore do not prevent review of this localization contribution. The full-suite checkbox remains open, and a CI pass still requires maintainer-approved workflows. This comparison is not a full-repository pass and does not classify every base failure as environment-only.

AI Disclosure

OpenAI Codex (GPT-6) substantially assisted with translation, conflict resolution, implementation, review and automated verification. The original contributors' authorship is retained. Further Turkish-language review is welcome.

Review

  • Platforms/shortcuts: preserve Ctrl-based Windows/Linux hints and macOS conventions, minimize accelerator policy, native paste routing and host Quit callbacks. Partial-locale fallbacks were checked for Spanish, French, Japanese, Korean and Chinese.
  • Local/folder/SSH/remote: presentation and search changes only; no new filesystem-host assumptions, protocol fields or remote execution paths.
  • Agents/integrations/providers: preserve agent names, developer commands, paths and interpolation variables. No provider-specific execution logic added.
  • Performance/UI: reuse existing lazy locale loading and localized catalogs. Inspected Windows screenshots for overlap/overflow; existing long-label ellipsis and narrow-window scrolling remain.
  • Basic security: no credentials, runtime dependencies, IPC channels or permissions added by the source change; existing escaping/rendering paths are retained.

Agent skill upstream boundary

  • Not applicable; no upstream skill-installer implementation, fixtures or documentation copied or mechanically translated.

Notes

Original MIT license and Copyright (c) 2026 Lovecast Inc. remain unchanged.

Author: @trugurpala (GitHub). X/Twitter handle not supplied.

Checklist

  • Focused on Turkish localization and the search/menu behavior it requires
  • Explained the user-facing change, mechanism and prior contributors
  • Attach the new Windows visual evidence before marking ready
  • Self-reviewed and independently reviewed
  • Cross-platform, remote and shortcut impacts considered; untested paths listed
  • Full pnpm lint, pnpm typecheck and pnpm build passed locally; command results and environment setup documented above
  • Compared the 57 observed failing files against the pre-contribution upstream base; zero additional failing test identities in this PR
  • Full repository pnpm test passes: observed Windows failures also reproduce on the upstream base; GitHub CI awaits maintainer approval

merttopuz and others added 10 commits September 22, 2026 11:10
Adds docs/readme/README.tr.md and wires the Türkçe link into the language
switcher on README.md and every other translated README.
Adds tr.json (full catalog coverage) and wires Turkish in as a selectable
UI language: shared ui-language/ui-locale types, the renderer and main
process lazy locale loaders, the settings language picker, and native
Electron menu labels (Edit/View/Window/App menu roles that previously had
no label override and fell back to Electron's own untranslated default).

Also fixes several renderer strings that interpolated a raw, untranslated
English word into an otherwise-translated template (floating terminal
toggle tooltip, worktree/dashboard child-agent disclosure labels, PR
viewed-file checkbox, and the Landing screen's create/navigate shortcut
hints), and localizes the Keyboard Shortcuts settings pane (shortcut
titles, group headers, and status filters), which previously rendered
entirely in English regardless of the active UI language.
The keybinding conflict message and the parse-error/unavailable messages
in ShortcutsPane still built their text from raw English template
literals even after the shortcut titles they reference were translated,
so a Turkish user hit a mixed-language error. Extracts the three
messages into shortcut-error-messages.ts and routes them through
translate().
The blocking-conflict message in ShortcutsPane.saveBindings was already
localized, but the sibling per-row conflict warning built in
buildShortcutDefinitionCatalog (surfaced as inline row warnings via
buildShortcutRowVisibility) still built its text from the raw English
definition title and a hardcoded "conflicts with" template, so a
conflicting shortcut showed a localized error only when it blocked
saving, and an English warning on the row otherwise. Routes it through
the same translateKeybindingTitle/getBindingConflictMessage helpers.

Also fixes a stale comment in i18n.ts referencing "the other four
locales" now that there are six non-English catalogs.
buildAgentTabKeybindingDefinitions() generates one definition per
installed TUI agent (id `tab.newAgent.<agent>`, group 'Agents'), so
they have no fixed slot in the static per-id keybinding titles catalog
and always rendered in English regardless of the active UI language.
Their title only varies by the agent's own (never-translated) display
name, so translateKeybindingTitle now detects that id shape and
interpolates the name into a single translated sentence instead, and
'Agents' is added to the group-title catalog map.

Adds keybinding-catalog-labels.test.ts covering both the static and
dynamic title paths and the group lookup.
No behavior change. Adds brief doc comments to the exported functions
introduced or touched in this PR's i18n work that lacked one.
Continue the Turkish work by merttopuz and mehmetefeaytas, preserving their commits. Sync current catalogs, fix localized shortcut search and native menu fallbacks, and add Windows Electron coverage.
@trugurpala

trugurpala commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor Author

I compared the Windows failures with the pre-contribution upstream base before marking this ready for review.

Same 57 previously failing files Passed Failed Skipped
Upstream base ae58ca06 1,760 590 6
PR head 3250365 1,760 590 6

All 590 failing test identities and all 57 file statuses match. There are zero PR-only failures in this observed set. This is a completed rerun of the failures observed in the earlier interrupted full-suite run, not a full-repository pass.

The messages include 532 Windows locked-file cleanup failures, 30 missing POSIX-shell failures and 2 file-symlink privilege failures. The remaining 26 also reproduce on the base and include other cleanup/expectation errors; I am not claiming that all of them are environment-only.

I also reran the localization/menu/Settings-search/dashboard selection: 23 files passed, 256 tests passed, 1 skipped, zero failed. No product source, test expectation, skip, lockfile or permission was changed to obtain these results. Existing lint/typecheck/build evidence still refers to the unchanged published source tree. GitHub CI remains pending maintainer approval.

Reproduction method and complete per-file results

The baseline was exported with git archive ae58ca06d675396ca9e958d144607e2195c6fd95 into a separate directory. It used its own sources/config/tests and the same installed dependencies through a node_modules junction. Package manifests, lockfile, workspace-package sources, Vitest config/runner/runtime pool are unchanged between these versions. Both runs used Windows, Node 24.19.0, Bun 1.4.3, Vitest 5.0.5 and ORCA_BACKGROUND_LAUNCH=1.

PR: pnpm test <the 57 paths below> --reporter=json --outputFile=<head-report.json>.
Baseline (reusing the prepared dependency/native environment): node config/scripts/run-vitest.mjs run --config config/vitest.config.ts <same 57 paths> --reporter=json --outputFile=<base-report.json>.

P/F/S means passed/failed/skipped assertions. All file-level statuses below are failed, including two files with passing assertions but cleanup-hook errors.

Test file PR P/F/S Base P/F/S
src/main/acp/acp-structured-background-task-stop.test.ts 0/22/0 0/22/0
src/main/acp/acp-structured-broken-stream.test.ts 0/2/0 0/2/0
src/main/acp/acp-structured-session-adapter-lifecycle.test.ts 0/22/0 0/22/0
src/main/ai-vault-search/session-search-scope-entry-points.test.ts 3/0/0 3/0/0
src/main/claude/claude-agent-sdk-exit-proof.test.ts 27/1/3 27/1/3
src/main/ipc/agent-session-attachment-upload.test.ts 5/1/0 5/1/0
src/main/ipc/pty-launch-parity.test.ts 59/1/0 59/1/0
src/main/runtime/acknowledged-terminal-tab-retirement.test.ts 0/13/0 0/13/0
src/main/runtime/agent-terminal-startup-prompt.test.ts 9/2/0 9/2/0
src/main/runtime/orca-runtime-agent-session-operation.test.ts 24/1/0 24/1/0
src/main/runtime/orca-runtime-structured-agent-session-create-intent.test.ts 11/1/0 11/1/0
src/main/runtime/runtime-extraction-regressions.test.ts 3/1/0 3/1/0
src/main/runtime/structured-chat-coordinator-mail.test.ts 0/23/0 0/23/0
src/main/runtime/structured-chat-dispatch-worker-lifecycle.test.ts 0/11/0 0/11/0
src/main/runtime/structured-chat-dispatch-worker-mail.test.ts 0/2/0 0/2/0
src/main/runtime/structured-chat-dispatch-worker.test.ts 0/8/0 0/8/0
src/main/runtime/structured-chat-worker-start.test.ts 0/8/0 0/8/0
src/main/runtime/structured-worker-cleared-session.test.ts 58/2/0 58/2/0
src/main/runtime/terminal-intentional-stop-exit.test.ts 0/10/0 0/10/0
src/main/runtime/terminal-retirement-async-durability.test.ts 0/6/0 0/6/0
src/main/managed-server/install/orcad-remote-shell-commands.integration.test.ts 0/32/0 0/32/0
src/main/native-chat/agent-session-wire/structured-agent-session-queued-card-holds.test.ts 0/17/0 0/17/0
src/main/native-chat/agent-session-wire/structured-agent-session-queued-compact.test.ts 0/24/0 0/24/0
src/main/native-chat/agent-session-wire/structured-agent-session-stop-event-entries.test.ts 0/18/0 0/18/0
src/main/native-chat/agent-session-wire/structured-agent-session-stopping.test.ts 0/26/0 0/26/0
src/main/runtime/orchestration/structured-session-mail-target.test.ts 18/1/0 18/1/0
src/main/runtime/rpc/orchestration-current-authority-precedence.test.ts 0/12/0 0/12/0
src/main/runtime/rpc/orchestration-legacy-compatibility-dispatcher.test.ts 0/22/0 0/22/0
src/main/runtime/rpc/orchestration-legacy-fence-jurisdiction.test.ts 0/5/0 0/5/0
src/main/runtime/rpc/orchestration-legacy-run-routing.test.ts 0/6/0 0/6/0
src/main/runtime/rpc/orchestration-legacy-takeover-current-authority.test.ts 0/2/0 0/2/0
src/main/runtime/rpc/orchestration-mutation-request-show-legacy.test.ts 0/1/0 0/1/0
src/main/runtime/session-tabs/headless-browser-group-persistence.test.ts 0/2/0 0/2/0
src/main/runtime/rpc/methods/ai-vault-search.test.ts 21/0/0 21/0/0
src/main/runtime/rpc/methods/ai-vault.test.ts 30/2/0 30/2/0
src/main/runtime/rpc/methods/linear-agent-access.test.ts 24/1/0 24/1/0
src/main/runtime/rpc/methods/orchestration/gates/gate-run-authorization.test.ts 0/11/0 0/11/0
src/main/claude/claude-stream-json-connection.test.ts 18/1/2 18/1/2
src/main/runtime/exit-provenance-audit.test.ts 0/11/0 0/11/0
src/main/runtime/orca-runtime.test.ts 1449/4/0 1449/4/0
src/main/native-chat/agent-session-wire/structured-agent-session-claude-opening-send-hold.test.ts 0/4/0 0/4/0
src/main/native-chat/agent-session-wire/structured-agent-session-claude-stop-ends-session.test.ts 0/20/0 0/20/0
src/main/native-chat/agent-session-wire/structured-agent-session-claude-subagent-row.test.ts 0/5/0 0/5/0
src/main/native-chat/agent-session-wire/structured-agent-session-codex-stop-row.test.ts 0/23/0 0/23/0
src/main/native-chat/agent-session-wire/structured-agent-session-conversation-stop.test.ts 0/36/0 0/36/0
src/main/native-chat/agent-session-wire/structured-agent-session-queued-messages.test.ts 0/34/0 0/34/0
src/main/native-chat/agent-session-wire/structured-agent-session-queued-pause-lift.test.ts 1/22/0 1/22/0
src/main/native-chat/agent-session-wire/structured-agent-session-recovery-resolution.test.ts 0/8/1 0/8/1
src/main/native-chat/agent-session-wire/structured-agent-session-subscriber-journal-retention.test.ts 0/2/0 0/2/0
src/main/native-chat/agent-session-wire/structured-agent-session-unnamed-stop-races.test.ts 0/7/0 0/7/0
src/main/native-chat/agent-session-wire/structured-agent-session-unsent-send-hold.test.ts 0/34/0 0/34/0
src/main/runtime/rpc/methods/agent-launch-restart-replay.test.ts 0/19/0 0/19/0
src/main/runtime/rpc/methods/structured-agent-session-adoption-replay.test.ts 0/2/0 0/2/0
src/main/runtime/rpc/methods/structured-agent-session-at-rest.test.ts 0/17/0 0/17/0
src/main/runtime/rpc/methods/structured-agent-session-options-workspace-scope.test.ts 0/3/0 0/3/0
src/main/runtime/rpc/methods/structured-agent-session-unsubscribe.test.ts 0/1/0 0/1/0
src/main/runtime/rpc/methods/structured-chat-tab-table.test.ts 0/18/0 0/18/0

Fresh passing localization selection:

src/shared/ui-language.test.ts
src/shared/ui-locale.test.ts
src/main/i18n/main-i18n-lazy-locale.test.ts
src/main/menu/gpu-acceleration-about-panel.test.ts
src/main/menu/register-app-menu.test.ts
src/renderer/src/i18n/catalog-nested-settings.test.ts
src/renderer/src/i18n/I18nProvider.test.tsx
src/renderer/src/i18n/intl-locale.test.ts
src/renderer/src/i18n/keybinding-catalog-labels.test.ts
src/renderer/src/i18n/lazy-locale.test.ts
src/renderer/src/i18n/localized-catalog.test.ts
src/renderer/src/i18n/plugin-chrome-allowlist.test.ts
src/renderer/src/i18n/project-runtime-repair-message.test.ts
src/renderer/src/i18n/provider-credit-balance-locales.test.ts
src/renderer/src/i18n/pseudo-localization.test.ts
src/renderer/src/i18n/relative-time-format.test.ts
src/renderer/src/i18n/runtime-required-catalog.test.ts
src/renderer/src/i18n/turkish-catalog-regression.test.ts
src/renderer/src/i18n/weekday-names.test.ts
src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.test.tsx
src/renderer/src/components/settings/settings-search-keywords.test.ts
src/renderer/src/components/settings/settings-search.test.ts
src/renderer/src/components/settings/shortcuts-localization.test.ts

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a0f717f3-df64-4b14-9922-d137cf5b2945
📥 Commits

Reviewing files that changed from the base of the PR and between 58e39fb and bb3348d.

📒 Files selected for processing: 8
  • docs/readme/README.tr.md
  • src/main/i18n/main-i18n.ts
  • src/renderer/src/components/settings/ShortcutCommandBlock.tsx
  • src/renderer/src/components/settings/ShortcutsPane.tsx
  • src/renderer/src/components/settings/shortcuts-localization.test.ts
  • src/renderer/src/components/settings/shortcuts-search.ts
  • src/renderer/src/i18n/I18nProvider.tsx
  • src/renderer/src/i18n/i18n.ts
🚧 Files skipped from review as they are similar to previous changes: 1
  • docs/readme/README.tr.md

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review.

📝 Walkthrough

The change adds Turkish as a selectable UI language, with locale loading, picker labels, and a Turkish README. Renderer components and keyboard shortcut settings use translated labels and search text. Native Electron menus use translated or platform-native role labels. Tests cover Turkish locale loading, UI translations, shortcut search, and native menu behavior.

Priority: ➖ Normal

Merge Risk: ⚪ Minimal · up to bb334

No specific Turkish localization issue remains identified that should block merging after normal checks.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly identifies the main change: refreshing Turkish internationalization and validating the Windows UI. It is concise and directly related to the changeset.
Description check Passed The description is comprehensive and follows the repository template. It explains the user-facing changes, rationale, linked issue, visual proof, testing, limitations, review considerations, and check…
Linked Issues check Passed Issue #22228 requires a selectable Turkish UI locale, locale registration and loading, NATIVE_PICKER_LABELS, README.tr.md, and shared fixes for native menus, raw English renderer strings, and shor…
Out of Scope Changes check Passed The changes remain connected to issue #22228. Catalog refreshes, README language links, locale-loader refactoring, JSDoc additions, menu extraction, renderer string fixes, shortcut search changes, and…
Docstring Coverage Passed Docstring coverage is 82.69% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 52 functions across 35 files. (1 skipped: 1…
Full details: Description check

Explanation

The description is comprehensive and follows the repository template. It explains the user-facing changes, rationale, linked issue, visual proof, testing, limitations, review considerations, and checklist status. It also clearly documents that the full test suite did not pass and that CI approval remains pending.

Full details: Linked Issues check

Explanation

Issue #22228 requires a selectable Turkish UI locale, locale registration and loading, NATIVE_PICKER_LABELS, README.tr.md, and shared fixes for native menus, raw English renderer strings, and shortcut titles. The current changes implement these items in the shared and renderer locale modules, Turkish catalog and README, menu builders, renderer components, and shortcut localization helpers. The catalog and tests cover Turkish terminology, translated shortcut titles and groups, Turkish dotted and dotless I matching, and catalog loading. Regression tests and Windows Electron tests cover language selection, Settings navigation, shortcut search, responsive layouts, and native menu labels.

Full details: Out of Scope Changes check

Explanation

The changes remain connected to issue #22228. Catalog refreshes, README language links, locale-loader refactoring, JSDoc additions, menu extraction, renderer string fixes, shortcut search changes, and regression or Windows UI tests support the Turkish locale or the shared fixes named by the issue. The evidence shows no unrelated dependency, permission, IPC, protocol, remote-execution, or product-feature change.

Full details: Docstring Coverage

Explanation

Docstring coverage is 82.69% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 52 functions across 35 files. (1 skipped: 1 unsupported.)

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Add concise JSDoc to the 27 undocumented named functions touched by the Turkish localization PR. Preserve existing runtime behavior and prior contributor credits.

Verified: local AST coverage 37/37, identical comment-free emitted code for all 18 changed files, formatting/lint/max-lines checks, and 256 focused tests passed with 1 skipped.
@trugurpala

Copy link
Copy Markdown
Contributor Author

Addressed the docstring coverage warning in c45f1f3.

Added or converted 27 concise JSDoc blocks across 18 files. A local TypeScript AST audit of the named functions touched by this PR now finds 37/37 documented, up from 10/37. This is a local measurement; CodeRabbit still needs to recalculate its own result.

Validation on Windows:

  • 23 test files passed: 256 tests passed, 1 skipped, zero failed (fresh localization/menu/Settings-search/dashboard run).
  • Formatting, lint on all 18 changed files, the repository max-lines check and git diff --check passed.
  • All 18 files produce identical executable output to the previous head when comments are removed. This commit changes documentation only.

The existing full-suite and untested-platform limitations still apply; no new CI pass is claimed.

@trugurpala

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please recheck the latest head c45f1f3, including Docstring Coverage. The updated report shows 78.57% across 42 functions. Could you list the remaining undocumented functions with file paths so I can address the precise gaps? My local audit covers 37 named functions and therefore does not reproduce your full denominator.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Already reviewed the last commit. Use @coderabbitai full review to rerun a review of the entire changeset.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@trugurpala

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

Please rerun against c45f1f3 and identify the remaining undocumented functions behind the 78.57% Docstring Coverage result, with file paths. The incremental review command reported this commit was already reviewed.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 59c83c76-cec4-4ba9-86f3-68f4fd6a9eed
📥 Commits

Reviewing files that changed from the base of the PR and between 70b2197 and c45f1f3.

📒 Files selected for processing: 51
  • README.md
  • config/scripts/locale-translation-policy.mjs
  • docs/readme/README.es.md
  • docs/readme/README.fr.md
  • docs/readme/README.ja.md
  • docs/readme/README.ko.md
  • docs/readme/README.pt.md
  • docs/readme/README.tr.md
  • docs/readme/README.zh-CN.md
  • src/main/i18n/main-i18n-lazy-locale.test.ts
  • src/main/i18n/main-i18n.ts
  • src/main/menu/app-menu-quit-item.ts
  • src/main/menu/app-menu-window.ts
  • src/main/menu/build-native-role-menu-items.ts
  • src/main/menu/native-role-label.ts
  • src/main/menu/register-app-menu.test.ts
  • src/main/menu/register-app-menu.ts
  • src/renderer/src/components/Landing.tsx
  • src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.test.tsx
  • src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.tsx
  • src/renderer/src/components/floating-terminal/FloatingTerminalToggleButton.tsx
  • src/renderer/src/components/github/PRViewedCheckbox.tsx
  • src/renderer/src/components/settings/ShortcutCommandBlock.tsx
  • src/renderer/src/components/settings/ShortcutFilterRail.tsx
  • src/renderer/src/components/settings/ShortcutRowsList.tsx
  • src/renderer/src/components/settings/ShortcutsPane.tsx
  • src/renderer/src/components/settings/settings-search.ts
  • src/renderer/src/components/settings/shortcut-definition-catalog.ts
  • src/renderer/src/components/settings/shortcut-error-messages.ts
  • src/renderer/src/components/settings/shortcuts-localization.test.ts
  • src/renderer/src/components/settings/shortcuts-search.ts
  • src/renderer/src/components/sidebar/ImportedWorktreesVisibilityLine.tsx
  • src/renderer/src/i18n/I18nProvider.tsx
  • src/renderer/src/i18n/en-runtime-required.json
  • src/renderer/src/i18n/i18n.ts
  • src/renderer/src/i18n/keybinding-catalog-labels.test.ts
  • src/renderer/src/i18n/keybinding-catalog-labels.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/tr.json
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/i18n/supported-languages.ts
  • src/renderer/src/i18n/turkish-catalog-regression.test.ts
  • src/shared/ui-language.test.ts
  • src/shared/ui-language.ts
  • src/shared/ui-locale.test.ts
  • src/shared/ui-locale.ts
  • tests/e2e/turkish-localization.spec.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.

Comment thread docs/readme/README.tr.md Resolved
@trugurpala

Copy link
Copy Markdown
Contributor Author

@coderabbitai Could you provide the exact nine function names and file paths counted as undocumented in the 33/42 Docstring Coverage result for c45f1f3? The full review retained 78.57% but did not list them. In particular, does the coverage parser recognize JSDoc above a const arrow-function declaration, or must it be attached directly to the arrow initializer? I am checking the locale-loader arrows and localized catalog factory as well. Please explain the existing coverage result; no extra full review is needed yet.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -uo pipefail
git rev-parse HEAD
git show -s --format='%H %s' c45f1f3ee9eb42c935edc65b3dd5c09af48d6c19
gh api --paginate repos/stablyai/orca/issues/31316/comments --jq '.[] | select(.body | test("Docstring|docstring|33/42|78.57")) | {id,html_url,body}'
gh api --paginate repos/stablyai/orca/pulls/31316/reviews --jq '.[] | select(.body | test("Docstring|docstring|33/42|78.57")) | {id,html_url,commit_id,body}'
fd -i 'localized.*catalog|catalog.*localized|docstring'
ast-grep outline src/main/i18n/main-i18n.ts
ast-grep outline src/renderer/src/i18n/i18n.ts

Length of output: 17278


🤖 web_search executed:

CodeRabbit docstring coverage JavaScript TypeScript arrow function JSDoc variable declaration parser undocumented functions coverage report

Length of output: 2897


🏁 Script executed:

#!/bin/bash
set -uo pipefail
ast-grep outline src/renderer/src/i18n/localized-catalog.ts --items all
sed -n '1,155p' src/main/i18n/main-i18n.ts
sed -n '1,165p' src/renderer/src/i18n/i18n.ts
sed -n '1,180p' src/renderer/src/i18n/localized-catalog.ts
gh api --paginate repos/stablyai/orca/pulls/31316/comments --jq '.[] | select(.body | test("docstring|Docstring|coverage|initializer|arrow")) | {path,line,body,html_url}'
gh api repos/stablyai/orca/commits/c45f1f3ee9eb42c935edc65b3dd5c09af48d6c19/check-runs --jq '.check_runs[] | {name,conclusion,output,details_url}'

Length of output: 12776


🤖 web_search executed:

site:docs.coderabbit.ai "docstring" "arrow" OR "parser" OR "coverage" JSDoc

Length of output: 292


@trugurpala I could not recover the exact nine function names from the existing report. The published review contains only aggregate results. It has no function-level list, and the available check-run output adds no coverage diagnostics.

What the existing result establishes

The published report states:

  • 42 functions analyzed across 35 files.
  • 78.57% coverage, consistent with 33 documented and 9 undocumented functions.
  • 15 unsupported files skipped.
  • An 80% threshold.

These totals do not identify which functions the parser counted. They also do not explain the difference from your 37-function audit. I cannot label nine source functions as the reported gaps without the underlying parser results.

JSDoc placement on arrow functions

JSDoc above a const arrow-function declaration is a conventional placement:

/** Load the Turkish catalog on demand. */
const loadTurkishCatalog = () => import('./locales/tr.json')

However, I could not verify whether CodeRabbit’s coverage parser recognizes that placement or requires a comment immediately before the arrow initializer. The available public documentation does not establish that behavior. I should not recommend moving comments based on an unverified parser assumption.

Source checks at c45f1f3

I confirmed that the inspected HEAD matches your commit.

Source Observation
src/main/i18n/main-i18n.ts LAZY_LOCALE_LOADERS.tr is an arrow function without its own JSDoc.
src/renderer/src/i18n/i18n.ts NON_DEFAULT_LOCALE_LOADERS.tr is an arrow function without its own JSDoc.
src/renderer/src/i18n/localized-catalog.ts createLocalizedCatalog is a function declaration without JSDoc. Its returned anonymous arrow also has no JSDoc.

These are source observations, not a reconstruction of the nine reported gaps. Their presence does not prove that the coverage check included them.

Verification of the exact nine functions remains inconclusive. The next useful check is to obtain the existing run’s per-function diagnostics through CodeRabbit support, with the PR URL and commit SHA. Please retry that lookup through support rather than changing comment placement to satisfy an unexplained count. I have not triggered another review.

You are interacting with an AI system.

@trugurpala

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Updated in 58e39fb:

  • Added JSDoc to the touched Chinese/Turkish lazy loaders and localized shortcut-search factory.
  • Attached four existing JSDoc blocks directly to their arrow initializers. The TypeScript AST now finds function-node documentation for all 42 functions in this diagnostic scope; this does not claim to reproduce CodeRabbit internals. Please recalculate Docstring Coverage.
  • Corrected “ClaudeCode” to “Claude Code” in the Turkish README, addressing the new review finding.

Fresh Windows validation: 23 test files passed; 256 tests passed, 1 skipped, zero failed. Formatting, scoped lint, max-lines ratchet and whitespace checks passed. All seven changed TypeScript files have identical emitted non-comment tokens to c45f1f3; formatter indentation accounts for the larger-looking diff. This is documentation-only.

The existing full-suite/platform limitations and maintainer-approval requirement for CI still apply.

@trugurpala

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@trugurpala

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Follow-up in 733dd58: the previous inline-arrow JSDoc placement still produced a coverage warning, so the nine locale/shortcut helpers now use named function declarations with conventional JSDoc. The related Settings search entry API is documented as well.

This commit is a behavior-preserving refactor, not comment-only. Dynamic imports remain lazy, catalog caching stays in createLocalizedCatalog, and effect cleanup retains the same callback reference. The converted bodies and parameters were compared against c45f1f3, accounting for explicit returns replacing expression bodies.

Fresh Windows validation on this exact source:

  • 23 test files passed; 256 tests passed, 1 skipped, zero failed.
  • Main-process and renderer TypeScript checks both passed (17,186 and 15,247 files respectively).
  • Formatting, scoped lint, max-lines ratchet and git diff --check passed.

Please verify Docstring Coverage for the new head. Existing full-suite/platform limitations and pending maintainer approval for CI remain unchanged.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 34846262-5c93-4266-ac5d-d0248cb05019
📥 Commits

Reviewing files that changed from the base of the PR and between 70b2197 and 58e39fb.

📒 Files selected for processing: 51
  • README.md
  • config/scripts/locale-translation-policy.mjs
  • docs/readme/README.es.md
  • docs/readme/README.fr.md
  • docs/readme/README.ja.md
  • docs/readme/README.ko.md
  • docs/readme/README.pt.md
  • docs/readme/README.tr.md
  • docs/readme/README.zh-CN.md
  • src/main/i18n/main-i18n-lazy-locale.test.ts
  • src/main/i18n/main-i18n.ts
  • src/main/menu/app-menu-quit-item.ts
  • src/main/menu/app-menu-window.ts
  • src/main/menu/build-native-role-menu-items.ts
  • src/main/menu/native-role-label.ts
  • src/main/menu/register-app-menu.test.ts
  • src/main/menu/register-app-menu.ts
  • src/renderer/src/components/Landing.tsx
  • src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.test.tsx
  • src/renderer/src/components/dashboard/DashboardAgentChildDisclosure.tsx
  • src/renderer/src/components/floating-terminal/FloatingTerminalToggleButton.tsx
  • src/renderer/src/components/github/PRViewedCheckbox.tsx
  • src/renderer/src/components/settings/ShortcutCommandBlock.tsx
  • src/renderer/src/components/settings/ShortcutFilterRail.tsx
  • src/renderer/src/components/settings/ShortcutRowsList.tsx
  • src/renderer/src/components/settings/ShortcutsPane.tsx
  • src/renderer/src/components/settings/settings-search.ts
  • src/renderer/src/components/settings/shortcut-definition-catalog.ts
  • src/renderer/src/components/settings/shortcut-error-messages.ts
  • src/renderer/src/components/settings/shortcuts-localization.test.ts
  • src/renderer/src/components/settings/shortcuts-search.ts
  • src/renderer/src/components/sidebar/ImportedWorktreesVisibilityLine.tsx
  • src/renderer/src/i18n/I18nProvider.tsx
  • src/renderer/src/i18n/en-runtime-required.json
  • src/renderer/src/i18n/i18n.ts
  • src/renderer/src/i18n/keybinding-catalog-labels.test.ts
  • src/renderer/src/i18n/keybinding-catalog-labels.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/tr.json
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/i18n/supported-languages.ts
  • src/renderer/src/i18n/turkish-catalog-regression.test.ts
  • src/shared/ui-language.test.ts
  • src/shared/ui-language.ts
  • src/shared/ui-locale.test.ts
  • src/shared/ui-locale.ts
  • tests/e2e/turkish-localization.spec.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 6 remain after this review.

Comment thread docs/readme/README.tr.md Resolved
@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Head commit changed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@trugurpala

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

The previous request was cancelled with “Head commit changed” while I addressed your README terminology finding. All fixes are now on bb3348d. Please review this stable head, including the documented function declarations in 733dd58 and the README terminology fix in bb3348d. Validation is recorded above; no further commits are being pushed while this review runs.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Already reviewed the last commit. Use @coderabbitai full review to rerun a review of the entire changeset.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Already reviewed the last commit. Use @coderabbitai full review to rerun a review of the entire changeset.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

OrcaWin added a commit that referenced this pull request Oct 28, 2026
* feat(i18n): add Turkish UI language

Register Turkish (tr) as a built-in UI language alongside en, zh, ko, ja,
es, fr and pt: language setting, system-locale detection, renderer and
main-process lazy catalogs, Settings picker label in every catalog,
Settings search keyword, onboarding picker, docs, README link and a
Turkish style glossary (config/i18n-turkish.md).

tr.json comes from the community Turkish catalog (#22200, refreshed in
#31316), reconciled with the current en.json: keys retired from en.json,
entries whose English source changed since the refresh, and entries with
placeholder mismatches are dropped and fall back to English until the
next translation pass.

Supersedes #31316.

Co-authored-by: Uğur Pala <mail@ugurpala.com>
Co-authored-by: mert <mmerttpz@gmail.com>
Co-authored-by: Mehmet Efe Aytaş <mehmetefeaytas@icloud.com>

* feat(i18n): complete Turkish catalog

Translate the 1,432 keys tr.json was missing, restore the count placeholder
in six Turkish singular forms, and order the catalog like en.json.

* fix(i18n): apply Turkish translation review

Correct 32 mistranslations (wrong meaning, translated command names and
example paths, swapped placeholders) and 525 glossary and grammar issues
that two independent review passes both flagged.

* fix(i18n): Turkish review fixes and dotted-I settings search

Fold U+0307 from lowercased Turkish İ so settings search matches plain-i
queries, fix sampled Turkish meaning/terminology issues, and align the
glossary casing rule with the catalog.

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
Co-authored-by: Uğur Pala <mail@ugurpala.com>
Co-authored-by: mert <mmerttpz@gmail.com>
Co-authored-by: Mehmet Efe Aytaş <mehmetefeaytas@icloud.com>
@OrcaWin

OrcaWin commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator

Thanks @trugurpala — Turkish (Türkçe) is now a built-in UI language via #34718, built on your catalog and README from this PR. The remaining strings were filled in and reviewed, and identifier casing was made locale-independent in #34709 so Turkish dotted/dotless i no longer breaks ID matching. Closing in favor of that PR. Wording fixes are very welcome as follow-ups against src/renderer/src/i18n/locales/tr.json (glossary in config/i18n-turkish.md).

@OrcaWin OrcaWin closed this Oct 28, 2026
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.

Add Turkish (tr) UI locale

4 participants