Skip to content

Add native Ukrainian localization support - #1250

Merged
steipete merged 4 commits into
steipete:mainfrom
Yuxin-Qiao:feat/add-ukrainian-localization
Jun 6, 2026
Merged

Add native Ukrainian localization support#1250
steipete merged 4 commits into
steipete:mainfrom
Yuxin-Qiao:feat/add-ukrainian-localization

Conversation

@Yuxin-Qiao

@Yuxin-Qiao Yuxin-Qiao commented May 31, 2026

Copy link
Copy Markdown
Contributor

Adds native Ukrainian UI support with low-risk, merge-friendly scope.

  • add "uk" to language picker
  • add full uk.lproj/Localizable.strings
  • add "language_ukrainian" label in existing locale files
  • add localization regression test coverage

Validation: localization key coverage + placeholder integrity checks pass; localization-focused tests pass.

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed June 6, 2026, 7:06 PM ET / 23:06 UTC.

Summary
The PR adds Ukrainian as a selectable app language, adds a full uk.lproj/Localizable.strings bundle, adds Ukrainian language-name labels to existing locales, adds localization catalog tests, and updates release notes.

Reproducibility: not applicable. this is a feature PR rather than a bug report. Current main source inspection confirms Ukrainian is not currently available, and the PR proof shows the new locale rendering in a live app run.

Review metrics: 3 noteworthy metrics.

  • Diff size: 12 files changed, 1108 insertions, 0 deletions. Most of the review surface is a new translated strings bundle, so copy quality matters more than code complexity.
  • Locale coverage: 1030 Ukrainian keys matched to 1030 English keys. The new locale appears complete against the current English string catalog by key set.
  • Proof inspected: 5 screenshots downloaded and viewed. The screenshots show the changed language in real app settings/menu surfaces, not only tests or mocks.

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

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

Rank-up moves:

  • Have a Ukrainian speaker spot-check the new strings bundle before release.

Risk before merge

  • [P1] Ukrainian wording quality cannot be fully validated from source inspection or screenshots; a Ukrainian-speaker spot-check remains the main maintainer judgment.
  • [P1] I did not run SwiftPM tests because this cleanup review was read-only; validation is based on source inspection, diff checks, contributor-reported localization tests, and inspected screenshots.

Maintainer options:

  1. Decide the mitigation before merge
    Land the locale after maintainer/native-speaker copy review, keeping the existing AppLanguage plus .lproj implementation pattern and any release-note handling under maintainer control.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • No automated repair is needed; maintainer review should focus on accepting the new locale and doing a Ukrainian copy spot-check.

Security
Cleared: The diff only touches localization resources, a small picker enum, a focused test, and release notes; I found no security or supply-chain concern.

Review details

Best possible solution:

Land the locale after maintainer/native-speaker copy review, keeping the existing AppLanguage plus .lproj implementation pattern and any release-note handling under maintainer control.

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

Not applicable; this is a feature PR rather than a bug report. Current main source inspection confirms Ukrainian is not currently available, and the PR proof shows the new locale rendering in a live app run.

Is this the best way to solve the issue?

Yes, the implementation is the narrow existing-pattern path: add the language enum case, add the localized bundle, add language labels, and cover the catalog with tests. The only safer pre-merge step is a native-speaker copy spot-check, not a code rewrite.

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against d3151b719e32.

Label changes

Label justifications:

  • P3: This is a low-risk user-facing localization feature with limited code surface and no urgent regression signal.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The contributor provided live app screenshots covering the General tab, main menu, Providers, Display, and Advanced surfaces in Ukrainian, and I inspected the downloaded images.
  • proof: sufficient: Contributor real behavior proof is sufficient. The contributor provided live app screenshots covering the General tab, main menu, Providers, Display, and Advanced surfaces in Ukrainian, and I inspected the downloaded images.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The contributor provided live app screenshots covering the General tab, main menu, Providers, Display, and Advanced surfaces in Ukrainian, and I inspected the downloaded images.
Evidence reviewed

What I checked:

  • Repository policy read: AGENTS.md was read fully; the relevant guidance is to keep changes small, use focused tests for parser/settings behavior, avoid live validations that could trigger Keychain prompts, and treat UI/runtime proof as useful for UI changes. (AGENTS.md:1, d3151b719e32)
  • Current main lacks Ukrainian locale: Current main lists ca, en, es, fr, pt-BR, sv, zh-Hans, and zh-Hant resource bundles, and rg found no Ukrainian language enum/resource references. (Sources/CodexBar/Resources, d3151b719e32)
  • PR wires Ukrainian into the picker: The PR head adds case ukrainian = "uk" and maps it to L("language_ukrainian"), matching the existing AppLanguage pattern. (Sources/CodexBar/PreferencesGeneralPane.swift:15, ad0a95ab5310)
  • Localization key coverage matched English: A source inspection compared unique keys in the PR head and found 1030 English keys and 1030 Ukrainian keys, with no missing or extra Ukrainian keys and no duplicate Ukrainian keys. (Sources/CodexBar/Resources/uk.lproj/Localizable.strings:1, ad0a95ab5310)
  • Diff hygiene check passed: git diff --check produced no whitespace or patch-format warnings for the PR diff against current main. (ad0a95ab5310)
  • Real behavior proof inspected: The contributor provided five screenshots from a live app run; downloaded proof images show Ukrainian UI in General, main menu, Providers, Display, and Advanced surfaces.

Likely related people:

  • Yuxin-Qiao: Current main's French localization commit added the same AppLanguage and resource-label pattern now being extended for Ukrainian, so this is relevant prior merged history beyond this PR. (role: recent localization contributor; confidence: high; commits: d3151b719e32; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Resources/fr.lproj/Localizable.strings, Sources/CodexBar/Resources/en.lproj/Localizable.strings)
  • steipete: The base localization picker/resources currently blame through the recent release/appcast update commit, and this PR also has owner-authored commits for release-note and placeholder preservation cleanup. (role: recent area contributor and release-path owner; confidence: high; commits: 723734ef3422, de2a30bdaa01, ad0a95ab5310; files: Sources/CodexBar/PreferencesGeneralPane.swift, CHANGELOG.md, Sources/CodexBar/Resources/uk.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 May 31, 2026
@Yuxin-Qiao

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Added real behavior proof for Ukrainian localization (uk) in a live app run.

What these screenshots verify

  1. General tab in Ukrainian
  • Language picker includes and selects Українська
  • Core settings copy renders in Ukrainian
General tab in Ukrainian
  1. Main menu card in Ukrainian (Codex view)
  • Session/weekly usage panels and labels render in Ukrainian
  • Cost/credits sections and action items are localized
Main menu card in Ukrainian
  1. Providers tab in Ukrainian
  • Provider detail panel, usage/status labels, and settings labels render in Ukrainian
Providers tab in Ukrainian
  1. Display tab in Ukrainian
  • Menu bar/display options and explanatory copy render in Ukrainian
Display tab in Ukrainian
  1. Advanced tab in Ukrainian
  • Advanced toggles, CLI/keychain sections, and descriptions render in Ukrainian
Advanced tab in Ukrainian

Validation recap

  • Localization key coverage check: pass
  • Placeholder integrity check: pass
  • Localization-focused tests: pass

@clawsweeper

clawsweeper Bot commented Jun 1, 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: 🐚 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. 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. labels Jun 1, 2026
@Yuxin-Qiao Yuxin-Qiao changed the title Add native Ukrainian localization support (uk) Add native Ukrainian localization support Jun 1, 2026
@steipete
steipete force-pushed the feat/add-ukrainian-localization branch from 65b2c1d to ad0a95a Compare June 6, 2026 23:00
@steipete
steipete merged commit ae63897 into steipete:main Jun 6, 2026
4 checks passed
@steipete

steipete commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Landed as ae63897.

Tested locally on the rebased integration stack before merge:

  • Resolved the stale-branch conflicts from Add native French localization support #1241 by keeping both French and Ukrainian language labels.
  • plutil -lint Sources/CodexBar/Resources/*.lproj/Localizable.strings — all locale files passed.
  • swift test --filter 'LocalizationLanguageCatalogTests|LocalizationBundleTests' — 7 tests passed.
  • make check — SwiftFormat lint mode + SwiftLint passed with 0 violations.
  • /Users/steipete/Projects/agent-scripts/skills/autoreview/scripts/autoreview --mode branch --base origin/main --prompt "Review CodexBar PR #1250 integration: Ukrainian localization replayed on top of current main after French localization #1241. Focus on conflict resolution, AppLanguage/catalog correctness, resource key/placeholder integrity, and changelog." — found translated interpolation placeholder names.
  • Fixed the Ukrainian placeholders so usage, name, and truncated remain verbatim.
  • Reran swift test --filter 'LocalizationLanguageCatalogTests|LocalizationBundleTests' — 7 tests passed.
  • Reran make check — SwiftFormat lint mode + SwiftLint passed with 0 violations.
  • Reran autoreview with prompt "Rerun review after fixing Ukrainian interpolation placeholders in CodexBar PR Add native Ukrainian localization support #1250 integration. Confirm no placeholder/key/resource/changelog issues remain." — clean, no accepted/actionable findings.

Remote exact-head verification before merge:

  • PR head verified: ad0a95a
  • GitGuardian Security Checks — passed
  • build-linux-cli (linux-arm64, ubuntu-24.04-arm) — passed
  • build-linux-cli (linux-x64, ubuntu-24.04) — passed
  • lint-build-test — passed

Verification images:

  • No new images were needed for my verification pass; this was resource/code validation plus existing PR screenshot proof.

@Yuxin-Qiao
Yuxin-Qiao deleted the feat/add-ukrainian-localization branch June 25, 2026 15:07
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: 🐚 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants