Skip to content

feat: add Korean (한국어) localization - #1460

Merged
steipete merged 4 commits into
steipete:mainfrom
soohanpark:feat/korean-localization
Jun 12, 2026
Merged

feat: add Korean (한국어) localization#1460
steipete merged 4 commits into
steipete:mainfrom
soohanpark:feat/korean-localization

Conversation

@soohanpark

@soohanpark soohanpark commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds native Korean (ko) as a first-class language, integrated into CodexBar's existing localization system.

  • ko.lproj/Localizable.strings — all 1,040 strings translated into native, idiomatic macOS-style Korean (Apple-standard terminology: 설정, 새로 고침, 종료, 메뉴 막대, 할당량, 크레딧 구매…). Format specifiers (%@, %lld, %1$@…) and \(name) interpolation placeholders are preserved exactly; positional specifiers are used where Korean word order requires reordering.
  • Registered ko in the AppLanguage enum + Settings → Language picker.
  • Added the localized "language_korean" name to every existing catalog (e.g. en→"Korean", ja→"韓国語", zh-Hans→"韩语") so the picker renders correctly in all languages.
  • Extended LocalizationLanguageCatalogTests parity list.

No changes were needed to Localization.swift (its default case already maps "ko"Locale("ko")) or Package.swift (.process("Resources") auto-bundles the new catalog).

Using it

Selectable as 한국어 in Settings → Language (requires app restart). In the default System mode it is now picked up automatically for users whose macOS language is Korean.

Verification

  • ✅ Deterministic parity gate (plutil + checks): 1040/1040 keys match en, 0 missing/extra, 0 placeholder/format-specifier mismatches.
  • swift build succeeds.
  • ✅ All 22 localization tests pass, including representative Korean labels and positional-format argument semantics.
  • ✅ Status-menu refresh tests pass 13/13 with an empty CODEX_HOME; the branch also removes an inherited account-dependent CI failure.
  • make check passes.
  • ✅ Maintainer autoreview reports no actionable findings.

Runtime proof

Freshly packaged app with Korean selected:

Korean CodexBar menu

Korean General settings

🤖 Generated with Claude Code

@clawsweeper

clawsweeper Bot commented Jun 12, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed June 12, 2026, 4:52 AM ET / 08:52 UTC.

Summary
Adds Korean as a selectable and system-detected app language, supplies a complete Korean localization catalog and language names in existing catalogs, and adds focused localization and deterministic status-menu tests.

Reproducibility: not applicable. this is a new language feature rather than a reported bug. Its behavior has a high-confidence validation path through catalog parity, focused tests, and packaged-app screenshots.

Review metrics: 3 noteworthy metrics.

  • Catalog parity: 1,040/1,040 keys. The Korean resource has complete key coverage against the English catalog with no parsed duplicates.
  • Production integration: 2 Swift lines added. Runtime integration is limited to one AppLanguage case and one localized picker-label case.
  • Changed surface: 17 files, 1,111 additions, 3 deletions. Almost all added lines are localization data; the remaining changes are focused integration and regression coverage.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Risk before merge

  • [P1] The exact-head build and test jobs are still pending, so the branch should wait for the repository's normal required checks before merge.

Maintainer options:

  1. Decide the mitigation before merge
    Merge the current focused localization implementation after the exact-head required checks pass, preserving the catalog-parity tests and explicit account-state test isolation.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] No repair task is identified; this PR only needs ordinary maintainer review and successful completion of the pending exact-head checks.

Security
Cleared: The diff adds localization resources and tests without changing dependencies, permissions, credentials, scripts, package resolution, or downloaded executable code.

Review details

Best possible solution:

Merge the current focused localization implementation after the exact-head required checks pass, preserving the catalog-parity tests and explicit account-state test isolation.

Do we have a high-confidence way to reproduce the issue?

Not applicable; this is a new language feature rather than a reported bug. Its behavior has a high-confidence validation path through catalog parity, focused tests, and packaged-app screenshots.

Is this the best way to solve the issue?

Yes. Extending the existing AppLanguage enum and .lproj resources is the repository's established, narrow localization path, and the focused tests cover registration, representative labels, parity, and positional-format semantics.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 8e50e8858588.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. Fresh packaged-app screenshots directly show Korean rendering in the status menu and General settings with 한국어 selected after restart.
  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Fresh packaged-app screenshots directly show Korean rendering in the status menu and General settings with 한국어 selected after restart.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): Fresh packaged-app screenshots directly show Korean rendering in the status menu and General settings with 한국어 selected after restart.
  • remove rating: 🌊 off-meta tidepool: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P3: This is an optional localization improvement with a narrow runtime footprint and no demonstrated regression.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): Fresh packaged-app screenshots directly show Korean rendering in the status menu and General settings with 한국어 selected after restart.
  • proof: sufficient: Contributor real behavior proof is sufficient. Fresh packaged-app screenshots directly show Korean rendering in the status menu and General settings with 한국어 selected after restart.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Fresh packaged-app screenshots directly show Korean rendering in the status menu and General settings with 한국어 selected after restart.
Evidence reviewed

What I checked:

  • Current main lacks Korean: The current AppLanguage catalog ends with Japanese and has no ko case, while the PR head adds Korean through the existing enum and localized-label switch. (Sources/CodexBar/PreferencesGeneralPane.swift:18, 8e50e8858588)
  • Complete catalog parity: The exact-head English and Korean catalogs each contain 1,040 parsed entries; key-set and duplicate-key comparisons returned no differences. (Sources/CodexBar/Resources/ko.lproj/Localizable.strings:1, a4a2284a6e01)
  • Established implementation pattern: Prior Vietnamese, Ukrainian, and Simplified Chinese additions used the same AppLanguage and .lproj resource path, so this does not introduce a parallel localization mechanism. (Sources/CodexBar/PreferencesGeneralPane.swift:5, b44218352c43)
  • Real packaged-app proof: The downloaded menu and General settings screenshots visibly show Korean labels and the 한국어 selection in a packaged app. (a4a2284a6e01)
  • Exact-head check state: GitGuardian has passed and the Linux builds plus lint/build/test workflow are pending, with no reported exact-head failure. (a4a2284a6e01)

Likely related people:

  • steipete: Current-main blame ties the language picker to this contributor, recent history ties them to the adjacent refresh test, and they authored the branch's integration tests, argument-order correction, and exact-head test isolation. (role: recent area contributor; confidence: high; commits: 6cf422512061, b999de0e5d9f, e6cbfc134278; files: Sources/CodexBar/PreferencesGeneralPane.swift, Tests/CodexBarTests/LocalizationLanguageCatalogTests.swift, Tests/CodexBarTests/StatusMenuPersistentRefreshTests.swift)
  • Yuxin Qiao: Introduced native Vietnamese and Ukrainian support through the same language-picker and localization-catalog architecture. (role: prior localization feature contributor; confidence: high; commits: b44218352c43, ae63897f3ee5; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Resources/vi.lproj/Localizable.strings, Sources/CodexBar/Resources/uk.lproj/Localizable.strings)
  • zzj: Added Simplified Chinese localization using the same core resource and language-registration approach. (role: prior localization feature contributor; confidence: medium; commits: dd54a28d509b; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Resources/zh-Hans.lproj/Localizable.strings)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. labels Jun 12, 2026
@steipete
steipete force-pushed the feat/korean-localization branch from d657b09 to 1565136 Compare June 12, 2026 08:13

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1565136c0f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Sources/CodexBar/Resources/ko.lproj/Localizable.strings Outdated
@steipete

Copy link
Copy Markdown
Owner

Fresh-bundle Peekaboo proof after rebasing to current main:

  • selected Korean in Settings and restarted the app
  • menu and General settings render Korean from the packaged bundle
  • restored the app language preference to System afterward
  • 1,040/1,040 catalog keys; 21 localization tests; make check; autoreview clean (0.86)

@clawsweeper re-review

pr1460-menu-ko-redacted pr1460-settings-ko-cropped

@clawsweeper

clawsweeper Bot commented Jun 12, 2026

Copy link
Copy Markdown

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jun 12, 2026
@steipete

Copy link
Copy Markdown
Owner

Exact-head update for 0e991901:

  • Fixed the Korean usage-chart accessibility format to preserve day/service argument meanings.
  • Reproduced the inherited macOS CI failure with an empty CODEX_HOME.
  • Made the status-menu refresh test provide its required account identity explicitly; 13/13 pass in the isolated environment.
  • Localization tests pass 22/22, make check passes, and branch autoreview reports no actionable findings.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 12, 2026

Copy link
Copy Markdown

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

soohanpark and others added 4 commits June 12, 2026 09:43
Add native Korean as a first-class language:
- ko.lproj/Localizable.strings with all 1040 strings translated to
  native macOS-style Korean (placeholders/format specifiers preserved)
- register `ko` in the AppLanguage enum + Settings language picker
- add the localized "language_korean" name to every existing catalog
- extend LocalizationLanguageCatalogTests parity list

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@steipete
steipete force-pushed the feat/korean-localization branch from 0e99190 to a4a2284 Compare June 12, 2026 08:47
@steipete

Copy link
Copy Markdown
Owner

Rebased onto current main (8e50e885) after the overlapping refresh-test stabilization landed. Exact head: a4a2284a.

The branch keeps main's canonical error-filtering assertions and adds deterministic account/cache setup so the test no longer depends on local Codex authentication.

Fresh proof:

  • Korean localization suite: 22 tests passed
  • isolated StatusMenuPersistentRefreshTests with an empty CODEX_HOME: 13 tests passed
  • make check: passed
  • exact-head autoreview: clean, confidence 0.87

Fresh CI is running for this head.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 12, 2026

Copy link
Copy Markdown

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 12, 2026
@steipete
steipete merged commit 3fdb549 into steipete:main Jun 12, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants