Repository navigation
Conversation
Add complete Turkish translations for all 11,728 localization keys and register `tr` across the renderer and main-process locale loaders. - New catalog `src/renderer/src/i18n/locales/tr.json` (100% coverage) - Register `tr` in ui-language, ui-locale, and both lazy locale loaders - Show "Türkçe" in the language selector and settings search - Add `docs/readme/README.tr.md` and link it from every README language row - Extend locale tests to cover `tr` Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| "8d1e160ed1": "Kenar çubuğunu yeniden deneyin veya bu yüzeyi yeniden yüklemek için sekme değiştirin.", | ||
| "ed6b168d00": "Sağ kenar çubuğu bir hatayla karşılaştı.", | ||
| "03a14f6b5b": "Sayfayı yeniden deneyin veya başka bir Orca yüzeyine gidin.", | ||
| "b7a714db1e": "This page bir hatayla karşılaştı.", |
There was a problem hiding this comment.
The phrase "This page" was not translated — only "bir hatayla karşılaştı." is in Turkish. Every sibling key in this error-boundary block is fully in Turkish (e.g.
"Orca'da bir renderer hatası oluştu.", "Durum çubuğu bir hatayla karşılaştı."), so this mixed string will render the English prefix verbatim to Turkish-speaking users when this page-level error fires. The English source (b7a714db1e) is "This page hit an error."
| "b7a714db1e": "This page bir hatayla karşılaştı.", | |
| "b7a714db1e": "Bu sayfa bir hatayla karşılaştı.", |
There was a problem hiding this comment.
Good catch — fixed. I also swept the catalog for the same pattern and found 42 more cases where a Turkish sentence frame wrapped untranslated English (mostly "No X found" → "Hiçbir checks bulunamadı"). All 43 are corrected in the follow-up commit.
Greptile SummaryThis PR adds complete Turkish (
Confidence Score: 5/5Safe to merge — this is a data catalog addition with no logic, UI layout, or platform-specific changes. All 11,728 keys are present and covered, placeholder parity with English is verified, both the renderer and main-process loaders are registered, and every relevant locale test suite is extended to include Files Needing Attention: No files require special attention.
|
| Filename | Overview |
|---|---|
| src/renderer/src/i18n/locales/tr.json | New 11,728-key Turkish catalog; all placeholders match English exactly, no untranslated sentences found, technical strings (CSS, CLI commands) correctly left in English |
| src/shared/ui-language.ts | Adds UI_LANGUAGE_TURKISH constant, BuiltInUiLanguage union member, and set entry — mirrors the existing pattern for all other locales |
| src/shared/ui-locale.ts | Adds 'tr' to SUPPORTED_UI_LOCALES and a resolveUiLocale branch for UI_LANGUAGE_TURKISH; pattern is consistent with existing locale branches |
| src/renderer/src/i18n/i18n.ts | Adds lazy loader for tr.json in the renderer; single-line addition consistent with other locale loaders |
| src/main/i18n/main-i18n.ts | Adds lazy loader for tr.json in the main process; ensures Turkish resolves identically in SSH/remote sessions |
| src/renderer/src/i18n/supported-languages.ts | Adds Turkish to UI_LANGUAGE_CHOICES and UI_LANGUAGE_CHOICE_FALLBACKS with correct 'Türkçe' label |
| src/renderer/src/components/settings/appearance-search.ts | Adds Turkish search keyword 'Türkçe' and native 'Dil' search term so Turkish speakers can find the language setting from any locale |
| src/renderer/src/i18n/native-chat-locales.test.ts | Deliberately relaxes the composer.model assertion to non-empty (from differs-from-English) because 'Model' is a loanword in Turkish; documented with an inline comment |
| config/localization-coverage-allowlist.json | Records the native 'Dil' keyword following the existing 'Idioma' pattern; no other changes |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[User selects Turkish\nin Settings → Appearance] --> B{resolveUiLocale}
B -->|UI_LANGUAGE_TURKISH| C[returns 'tr']
C --> D[Renderer lazy loader\ni18n.ts]
C --> E[Main-process lazy loader\nmain-i18n.ts]
D --> F[tr.json catalog\n11728 keys]
E --> F
F --> G[i18next pipeline\nauto-escapes interpolation]
G --> H[Turkish UI rendered]
I[Search: 'Dil' or 'Türkçe'\nin Settings search] --> J[appearance-search.ts\ntranslateSearchKeyword]
J --> A
Reviews (2): Last reviewed commit: "fix(i18n): translate remaining half-tran..." | Re-trigger Greptile
|
Important Review skippedReview was skipped as selected files did not have any reviewable changes. 💤 Files selected but had no reviewable changes (1)
⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughAdds Turkish as a supported UI language with shared normalization and locale-resolution handling. Turkish translations are added to language labels and lazy-loading maps, with language-search keywords and localization coverage configuration updated. Main and renderer tests now validate Turkish loading, translations, and localized feature copy. Documentation adds a complete Turkish README and updates language-selector links across existing README files. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
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 |
Fix 43 entries where a Turkish sentence frame was left wrapping untranslated English, mostly the "No X found" pattern rendering as "Hiçbir checks bulunamadı". Includes the `This page hit an error.` case flagged in review. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
thanks for the PR. would love to add Turkish support. we're doing some workflow improvements on how we can maintain multi-language translation going forward, and will land the PR once our new workflow lands |
Thanks for the update, Glad to hear Turkish support will be added. Looking forward to the new translation workflow. Feel free to let me know if any changes are needed on my side. Thanks |
|
Thank you for putting this together — and I am sorry it sat unanswered for so long, which is on us, not you. We are not taking on new UI locales right now. Orca ships en/es/ja/ko/zh, and each one carries ongoing cost beyond the initial catalog: every new English string has to be re-translated, the build-time repair policy needs per-locale glossary and override rules, and mistranslations reach users in surfaces nobody on the team can read. We are currently working through a backlog of correctness bugs in the five we already ship, and adding a sixth before that is under control would not be fair to the people using it. That is a decision about our capacity, not about the quality of your work. Closing so the queue reflects reality rather than leaving it open indefinitely — if that changes, this is easy to reopen and we will come back to the contributors who offered first. Thanks again for the time you put in. |
|
I'm sorry — I closed this, and that was the wrong call. Reopening it. The reasoning I gave (that we aren't taking on new built-in locales right now) is still true, but closing your PR was not the right way to act on it. You did the work, it sat for months without a reply, and then it got closed with an explanation of our constraints. That's a bad trade for you, and I apologize. Here's what's actually going on. We do want these locales. What we can't currently take on is maintaining them in-tree, where every new English string becomes translation debt across every catalog and a mistranslation ships to users in a surface nobody on the team can read. So the direction we're working toward is the one where that maintenance sits with the people who actually speak the language: plugin language packs. Most of that mechanism is already in the repo today:
The test fixture for that manifest contract uses What's not there yet is the part that would make this pleasant for you: there's no authoring guide, no scaffolding to generate a starter catalog from I'd rather leave this open and come back to you when that lands than close it and have you find out from a changelog. If you'd prefer to close it yourself in the meantime, that's entirely your call — but it should be yours, not mine. Thanks for the work, and sorry again for how I handled it. |
Thank you so much for taking the time to explain everything so clearly, and especially for reopening the PR. I genuinely appreciate it. I also really appreciate the way you handled this. Your message was incredibly thoughtful, kind, and respectful, and honestly, there was no need to apologize — I completely understand the reasoning and the maintenance concerns behind the decision. The plugin-based language pack approach makes a lot of sense to me, and I’m more than happy to support that direction. Whenever the necessary tooling or documentation is ready, please feel free to reach out. I’m ready to do whatever is needed on my side to help bring Turkish support to Orca — whether that’s adapting the existing translation into a language pack, keeping it in sync, testing it, reviewing translations, or helping with anything else related to the Turkish locale. Thank you again for your kindness, transparency, and for taking the time to reconsider the PR. I really appreciate it, and I’ll be happy to contribute whenever you’re ready. |
|
For anyone who lands here wanting Turkish today: there is now a community language-pack plugin on the mechanism the maintainers described above, no app patching: Repo: https://github.com/berkaysirtas/orca-turkish Install: Settings → Plugins → Install plugin → Git URL → It is early (215 keys: menus, tray, language and status-bar settings, worktree palette, agent dashboard, recovery screens) and grows per release. The catalog is generated and validated with the scaffold tool proposed in #20513, so protected keys, placeholder parity and catalog limits are checked before every tag. Happy to fold in the strings from this PR with credit if @ByEzel93 is up for it. |
|
Thank you for this! Turkish (Türkçe) is now a built-in UI language as of #34718, so I'm closing this in its favor. If you spot wording that reads wrong, a follow-up PR against |
Summary
Adds complete Turkish (
tr) language support. Users can now pick Türkçe in Settings → Appearance → Language, and find that setting by searching eitherLanguageorDilfrom any interface locale.All 11,728 localization keys are translated.
verify:localization-catalogreportstr.json coverage: 11728/11728 translated, 0 missing, which makes it the only fully covered non-English catalog today (es/ja/ko/zh are each at 11691/11728).New files
src/renderer/src/i18n/locales/tr.json— full Turkish catalogdocs/readme/README.tr.md— Turkish READMELocale registration
src/shared/ui-language.ts—UI_LANGUAGE_TURKISH, union member, values setsrc/shared/ui-locale.ts—trinSUPPORTED_UI_LOCALES+ language→locale resolutionsrc/renderer/src/i18n/supported-languages.ts— selector entry withTürkçefallback labelsrc/renderer/src/i18n/i18n.ts+src/main/i18n/main-i18n.ts— lazy loader entries for renderer and main processsrc/renderer/src/components/settings/appearance-search.ts—Türkçeplus the nativeDilsearch keyworden/es/ja/ko/zh.json— added only thesettings.appearance.language.turkishlabel so Turkish appears in every locale's selector. No existing translations were modified.config/localization-coverage-allowlist.json— records theDilkeyword, mirroring the existingIdiomaentryDocs —
Türkçelinked from the main README and all six translated READMEs, following the existing pattern where each README lists every language but its own.Translation notes
Brand names, CLI commands, flags, file paths, code identifiers, CSS class strings, and test IDs are deliberately left in English.
One thing worth flagging: the key extractor sweeps some non-UI strings into the catalog, and the existing es/ja catalogs translated them — producing entries like
'mac' → 'impermeable'(raincoat),'slug' → 'ナメクジ'(the animal), and'text-foreground' → 'texto-primer plano'(a CSS class). The Turkish catalog does not carry those over. Happy to open a separate issue for the other locales if that would help.Placeholder parity (
{{value0}},{{count}}, named variables) was verified programmatically across all 11,728 keys — zero mismatches.Screenshots
No visual change— no layout, component, or styling changes. The only user-visible difference is the new "Türkçe" entry in the language selector, and Turkish strings once it is selected.Testing
pnpm lintpnpm typecheckpnpm testpnpm buildExtended the existing locale tests to cover
tr:main-i18n-lazy-locale,lazy-locale,locale-english-regression,native-chat-locales,smart-workspace-jira-locales,ui-language,ui-locale,osc52-clipboard-copy,osc52-clipboard-toast. These are the tests that would catch a missing loader registration or an untranslated catalog, which are the realistic regressions for this change.All three localization verifiers pass:
verify:localization-catalog(11728/11728),verify:localization-coverage,verify:localization-extraction.Full suite: 41,472 passed. Five unrelated tests are flaky locally (WSL hook relay, relay agent-exec, electron-vite dev startup) — a different subset failed on each run and none touch i18n, so I left them alone.
One test contract was relaxed, deliberately:
native-chat-locales.test.tsasserted thatcomposer.modeldiffers from English in every locale. "Model" is spelled identically in Turkish, so that key moved into the existing non-empty-only group next to theon/offloanword exception, with a comment explaining why. Every other assertion in that test is unchanged. Happy to revert and translate the key differently if you'd rather keep the contract strict.AI Review Report
Reviewed with Claude Code. Risks checked and findings:
⌘/⇧vsCtrl+/Shift+placeholders and their surrounding markup intact, so per-platform label rendering is unaffected.tridentically to local ones. No filesystem, process, credential, or network assumptions were added.pull request/merge request/PR/MRand the GitHub/GitLab/Jira/Linear product names are left untranslated so GitHub-specific wording does not leak into GitLab or other provider surfaces.tr.jsonis only fetched when Turkish is active — zero cost for everyone else. No new modules, imports, or work on any hot path.Flagged and fixed during review: a handful of half-translated strings left mid-sentence in English (e.g.
"Bir project so we can authenticate to GitLab seçin."), and several inconsistencies where the same English string had been rendered two different ways. Both classes were found by scripted audits over the catalog and corrected.Security Audit
No new inputs, IPC channels, command execution, path handling, auth flows, secrets, or dependencies. The change is inert translation data rendered through the existing i18next pipeline, which escapes interpolation by default, so the added strings cannot introduce injection. Interpolation placeholders were verified to match English exactly across all keys, so no format string can silently drop or invent a variable. No follow-up needed.
Notes
X (Twitter): https://x.com/ezelphp