Skip to content

fix(i18n): distinguish Korean workspace and worktree labels - #24769

Open
hjKim1597 wants to merge 1 commit into
stablyai:mainfrom
hjKim1597:hojin/fix-11727-ko-workspace-terms
Open

hjKim1597 wants to merge 1 commit into
stablyai:mainfrom
hjKim1597:hojin/fix-11727-ko-workspace-terms

Conversation

@hjKim1597

@hjKim1597 hjKim1597 commented Oct 2, 2026 •

Copy link
Copy Markdown

ELI5

Some Korean labels name a workspace as a worktree, or a worktree as a workspace. This corrects 22 strings so the Korean UI names the same object as the English UI, including “Remove workspace” and “Open Parent Worktree.”

What Changed

Update the 22 strings in src/renderer/src/i18n/locales/ko.json and pin the same values in config/scripts/locale-ko-key-overrides.json. This corrects one existing override and adds 21, so catalog regeneration preserves the wording.

The changes cover the SSH reconnect overlay, parent-worktree menu, host-removal counts, Linear filters and guidance, and related workspace messages. They also repair the corrupted Linear text containing �크트리. Placeholders, punctuation, and the literal git worktree unlock <worktree-path> command are preserved; the corrupted Linear sentence is rewritten.

Extend the existing catalog and override test suites to check all 22 values and run them through the actual repair policy.

Why

A workspace and a Git worktree are different objects. The wrong noun makes removal and navigation actions misleading. I'm a native Korean speaker and reviewed these 22 strings against their English source and UI context.

#12514 incorporated the repair crash guard from #11728 but left the catalog regeneration for a separate change. Editing only the catalog would let an existing override restore the wrong parent-worktree label; editing only the overrides would leave the shipped labels wrong. Updating both fixes the UI and keeps the correction durable without changing translation logic.

Linked Issue

Fixes #11727

This addresses the workspace/worktree object mix-ups and corrupted Linear text. The issue's broader primary/default terminology and worktree spelling normalization remain separate follow-ups.

Visual Proof

Before (Orca 1.4.217 with the Korean UI, right-click menu of a child worktree in the sidebar):

Korean worktree context menu before the fix: 상위 워크스페이스 열기 below 상위 워크트리 변경…

The highlighted item is Open Parent Worktree, but it reads 상위 워크스페이스 열기 ("Open Parent Workspace"). The item right above it, 상위 워크트리 변경… ("Change Parent Worktree…"), already names the same parent correctly. With this PR the highlighted item reads 상위 워크트리 열기.

An after screenshot has not been captured. The table below lists exact before/after values from the catalog.

Before After
워크트리 제거 워크스페이스 제거
상위 워크스페이스 열기 상위 워크트리 열기
워크트리 1개 워크스페이스 1개
워크트리 {{count}}개 워크스페이스 {{count}}개
워크트리 선택 워크스페이스 선택
상태, 담당자, 레이블 필터는 단일 Linear �크트리의 ID를 사용합니다. 필터링할 워크트리를 선택하세요. 상태, 담당자, 레이블 필터는 단일 Linear 워크스페이스의 ID를 사용합니다. 해당 속성으로 필터링할 워크스페이스 하나를 선택하세요.

Testing

  • I manually tested these changes locally
  • Automated tests added/updated, or explained why not below

Verified on macOS with Node 24, pnpm 12, and ORCA_BACKGROUND_LAUNCH=1:

  • Locale/i18n suites: 35 files, 285 tests passed.
  • Scoped oxlint and oxfmt --check, pnpm run check:code-quality:changed, and pnpm run tc:web passed.
  • pnpm run verify:localization-catalogs, verify:localization-extraction, verify:localization-coverage, and git diff --check passed.

The existing ko-ui-semantic-mistranslations.test.ts and locale-ko-key-overrides.test.mjs now check the shipped and override values for every changed key. The policy tests feed in old values, corrected values, English fallbacks, and a cloned full catalog; they also check repeated repair, placeholders, the Git command literal, and the repaired Linear text.

An in-memory comparison against HEAD data fails all 22 catalog and 22 override exact-value assertions; the current data passes. This was an assertion-equivalent comparison, not a Vitest run on an old checkout.

Full pnpm lint, pnpm typecheck, pnpm test, and pnpm build were not run; the focused checks above are the local evidence, with broader checks left to CI. The repair CLI was not run because it currently rewrites unrelated catalog values. The tests exercise its policy in memory. Rendered UI, Linux, Windows, and live SSH sessions were not manually tested.

AI Disclosure

Codex (gpt-6-astra) workers handled research, planning, implementation, and an independent verification pass, coordinated by Claude Code, which also reran the tests independently. I reviewed the Korean wording and final diff.

Review

AI-agent review summary:

  • Cross-platform / SSH / local: Catalog text and tests only; no execution, removal, path, shortcut, or remote-wire behavior changes. “Workspace” follows the English object, including folder workspaces.
  • Agents / integrations / git providers / mobile: No provider behavior changes; mobile catalogs are untouched.
  • UI quality: The corrected nouns match the English objects; placeholders and Korean particles were checked. Rendered fit remains unverified.
  • Security / performance / compatibility: No new production logic, inputs, dependencies, catalog keys, or runtime work.

Agent skill upstream boundary

  • Not applicable, or this change follows docs/reference/agent-skill-sharing-upstream-boundary.md and copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

This keeps the change to object names. The 10 audited primary/default terminology keys and 132 spelling-normalization keys are unchanged and deferred.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

Author

X: @room_nomad

🤖 Generated with Claude Code

Correct 22 Korean labels to match the workspace or worktree named by
their English source. Pin the same values in the Korean key overrides
and cover catalog values and repair-policy stability with regression tests.

Fixes stablyai#11727

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

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: 7c33a49f-d151-400b-a650-f45a207c5602

📥 Commits

Reviewing files that changed from the base of the PR and between 76b1a90 and f5e8cb9.

📒 Files selected for processing (4)
  • config/scripts/locale-ko-key-overrides.json
  • config/scripts/locale-ko-key-overrides.test.mjs
  • src/renderer/src/i18n/ko-ui-semantic-mistranslations.test.ts
  • src/renderer/src/i18n/locales/ko.json

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


📝 Walkthrough

Walkthrough

The Korean locale and translation overrides were updated for workspace and worktree terminology across Linear, SSH, terminal, session-resumption, and agent messages. Tests check the corrected values, repeated repair, catalog repair, placeholders, and command literals.

Priority: ⬇️ Low

Severity of issue fixed: Low

Merge Risk: ⚪ Minimal · up to f5e8c

The Korean wording corrections appear ready to merge after normal checks.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The PR fixes the two reported object-label defects in [#11727], repairs the reported Linear text, pins 22 Korean values, and adds policy tests. The PR does not complete the wider coding scope describe… Implement or link reviewed code for the remaining [#11727] requirements: distinguish primary from default and complete the required Korean worktree terminology normalization. Also provide evidence that the repairCatalog undefined-valu…
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: correcting Korean workspace and worktree labels.
Description check ✅ Passed The description is detailed and covers the change, rationale, linked issue, testing, scope, and review considerations. It provides before-and-after text values, but it does not include an after screen…
Out of Scope Changes check ✅ Passed The changed locale values, matching Korean key overrides, and added policy tests all support the terminology and catalog-repair objectives in [#11727]. The tests cover the changed values, placeholders…
Full details: Linked Issues check

Explanation

The PR fixes the two reported object-label defects in [#11727], repairs the reported Linear text, pins 22 Korean values, and adds policy tests. The PR does not complete the wider coding scope described in [#11727]. The primary versus default terminology remains unchanged, and broader worktree spelling normalization remains deferred. The summary attributes the repair crash guard to #12514, but it does not establish that guard at the reviewed head. Therefore, full compliance with the directly linked issue is not established.

Resolution

Implement or link reviewed code for the remaining [#11727] requirements: distinguish primary from default and complete the required Korean worktree terminology normalization. Also provide evidence that the repairCatalog undefined-value guard is present at the reviewed head, or implement it if it is absent.

  • Fix all pre-merge checks with AI
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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.

@hjKim1597

Copy link
Copy Markdown
Author

@coderabbitai run pre-merge checks

@coderabbitai

coderabbitai Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor
✅ Actions performed

Running Pre-merge checks. Results will be posted in the summary comment once complete.

@hjKim1597

Copy link
Copy Markdown
Author

@coderabbitai The repairCatalog guard is already at this PR's head (f5e8cb9). config/scripts/locale-translation-policy.mjs L491–L495 skips leaves whose locale value is not a string instead of crashing on undefined. It landed in f9a5920 (from #11728, consolidated by #12514), which is an ancestor of this head, and config/scripts/locale-repair-catalog-missing-leaves.test.mjs covers it (2/2 pass locally).

The primary/default terminology and the worktree spelling normalization in #11727 are intentionally left for follow-up PRs, to keep this one small and reviewable. This PR covers the workspace/worktree object mix-ups and the corrupted Linear text.

@coderabbitai

coderabbitai Bot commented Oct 2, 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 -euo pipefail
git rev-parse HEAD
fd '^locale-(translation-policy\.mjs|repair-catalog-missing-leaves\.test\.mjs)$' .
ast-grep outline config/scripts/locale-translation-policy.mjs --match repairCatalog --view expanded
sed -n '460,530p' config/scripts/locale-translation-policy.mjs
ast-grep outline config/scripts/locale-repair-catalog-missing-leaves.test.mjs --items all
cat -n config/scripts/locale-repair-catalog-missing-leaves.test.mjs
if git cat-file -e f9a5920^{commit} 2>/dev/null; then
  if git merge-base --is-ancestor f9a5920 HEAD; then
    printf '\nf9a5920 is an ancestor of HEAD\n'
  else
    printf '\nCould not confirm f9a5920 as an ancestor of HEAD\n'
  fi
else
  printf '\nf9a5920 is not available in the local clone\n'
fi

Length of output: 5118


@hjKim1597 Thanks for the clarification. I verified the repairCatalog guard at head f5e8cb9. It skips non-string locale values before calling repairTranslatedValue. The missing-leaf crash concern does not apply to this PR.

config/scripts/locale-repair-catalog-missing-leaves.test.mjs contains both regression tests: missing leaves do not throw, and existing leaves still get repaired. I inspected the tests but did not rerun them. I could not verify the commit ancestry because f9a5920 is unavailable in the local clone.

The primary/default terminology and worktree spelling normalization are outside this PR’s scope. This PR covers workspace/worktree object mix-ups and corrupted Linear text. Would you like separate follow-up issues for the deferred work, or keep tracking it in #11727?


✏️ Learnings added
Learnt from: hjKim1597
URL: https://github.com/stablyai/orca/pull/24769

Timestamp: 2026-10-02T13:50:27.649Z
Learning: In stablyai/orca, config/scripts/locale-translation-policy.mjs repairCatalog skips locale leaves whose values are not strings before calling repairTranslatedValue. config/scripts/locale-repair-catalog-missing-leaves.test.mjs covers missing leaves without throwing and continued repair of existing leaves.

Learnt from: hjKim1597
URL: https://github.com/stablyai/orca/pull/24769

Timestamp: 2026-10-02T13:50:27.649Z
Learning: stablyai/orca PR #24769 addresses Korean workspace/worktree object mix-ups and corrupted Linear text in the locale catalog and key overrides. Primary/default terminology and worktree spelling normalization from #11727 are intentionally deferred to follow-up PRs and are not requirements for this PR.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@hjKim1597

Copy link
Copy Markdown
Author

@Jinwoo-H Could you take a look when you have a moment? This PR only changes Korean UI wording (workspace vs. worktree), so a native Korean speaker's review would help a lot. Thank you!

@pullfrog pullfrog 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.

✅ No new issues found.

Reviewed changes

  • Korean catalog corrections — 22 values in ko.json now name the same object as their English source (workspace → 워크스페이스, worktree → 워크트리), plus repair of the corrupted Linear string containing \uFFFD.
  • Override pinning — locale-ko-key-overrides.json gains 21 entries and corrects 1 existing (WorktreeContextMenu.8d9cd19d09), so catalog regeneration preserves the wording.
  • Regression guards — locale-ko-key-overrides.test.mjs adds the 22-key table and four tests through the real repair policy; ko-ui-semantic-mistranslations.test.ts extends its shipped/override assertions to the same values.

Every changed value matches its English source in both directions, a full-catalog scan finds no remaining EN=workspace/KO=워크트리 (or inverse) mismatches, and no \uFFFD survives. The changed tests pass (7 passed), oxlint is clean, and verify-localization-catalogs.mjs passes.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@pullfrog pullfrog 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.

✅ No new issues found.

Reviewed changes

  • Korean catalog corrections — 22 values in ko.json now name the same object as their English source (workspace → 워크스페이스, worktree → 워크트리), plus repair of the corrupted Linear string containing \uFFFD.
  • Override pinning — locale-ko-key-overrides.json gains 21 entries and corrects 1 existing (WorktreeContextMenu.8d9cd19d09), so catalog regeneration preserves the wording.
  • Regression guards — locale-ko-key-overrides.test.mjs adds the 22-key table and four tests through the real repair policy; ko-ui-semantic-mistranslations.test.ts extends its shipped/override assertions to the same values.

Every changed value matches its English source in both directions, a full-catalog scan finds no remaining EN=workspace/KO=워크트리 (or inverse) mismatches, and no \uFFFD survives. The changed tests pass (7 passed), oxlint is clean, and verify-localization-catalogs.mjs passes.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@hjKim1597

Copy link
Copy Markdown
Author

@brennanb2025 Friendly ping: could you approve the CI workflows and take a look when you have a moment? CodeRabbit and Pullfrog found no issues, and it still merges cleanly. Thank you!

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Korean UI names the wrong object in workspace/worktree delete and remove copy

1 participant