Skip to content

Add native Polish localization support - #1253

Merged
steipete merged 12 commits into
steipete:mainfrom
Yuxin-Qiao:feat/polish-native-localization
Jun 15, 2026
Merged

Add native Polish localization support#1253
steipete merged 12 commits into
steipete:mainfrom
Yuxin-Qiao:feat/polish-native-localization

Conversation

@Yuxin-Qiao

Copy link
Copy Markdown
Contributor

Summary

  • add Polish (pl) as a selectable app language
  • add pl.lproj/Localizable.strings for native Polish localization
  • add language_polish label across existing locales
  • improve Polish translations for key user-facing UI (General/Display/Advanced, quota warnings, status/debug text)

Testing

  • ran localization-focused swift test targets
  • in this environment, SwiftPM expanded into a large full build graph; final pass/fail summary was not captured

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed June 15, 2026, 3:18 AM ET / 07:18 UTC.

Summary
The PR adds Polish as a selectable app language, adds pl.lproj/Localizable.strings, adds language_polish labels across existing catalogs, extends localization tests, and updates the unreleased changelog.

Reproducibility: not applicable. this is a localization feature PR rather than a bug report. Current main lacks Polish, while the diff and screenshots establish the changed behavior path.

Review metrics: 4 noteworthy metrics.

  • Changed files: 21 files, 1,128 additions, 0 deletions. The patch is mostly localization data, but it is broad enough that key parity and language quality matter before merge.
  • Polish catalog coverage: 1,047 keys; 46 values unchanged from English. This addresses the earlier placeholder-completeness blocker while leaving native wording acceptance as the main review gate.
  • Proof inspected: 3 screenshots viewed. The inspected main menu and settings screenshots directly show Polish selected and rendered.
  • Latest checks: 3 CI jobs in progress; 1 security check passed. The head is mergeable, but normal checks still need to complete before landing.

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:

  • Wait for current-head CI on bdb5d1f2a37d1222c57cba41d979bb8608b01f37 to finish.
  • [P2] Have a maintainer or native Polish reviewer accept the catalog quality before merge.

Risk before merge

  • [P2] Adding pl.lproj changes Polish System-language users from English fallback to Polish UI after upgrade, so catalog quality should be explicitly accepted by a maintainer or native Polish reviewer.
  • [P1] Current-head CI was still in progress at inspection time; merge should wait for the normal checks to finish.

Maintainer options:

  1. Merge After Polish Quality Acceptance (recommended)
    Have a maintainer or native Polish reviewer accept the catalog as ready for automatic System-language use, then merge after current-head CI passes.
  2. Keep Open For Copy Revisions
    If native review finds awkward or still-English user-facing copy, keep the PR open for targeted Polish catalog fixes before merge.

Next step before merge

  • [P2] No narrow automated repair remains; the next action is maintainer or native-language quality review plus normal current-head check completion.

Security
Cleared: The diff changes localization resources, one language enum, tests, and changelog text; it adds no dependencies, workflows, secret handling, or code-execution path.

Review details

Best possible solution:

Land the focused Polish localization after current-head CI passes and a maintainer or native Polish reviewer accepts the catalog quality for automatic System-language use.

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

Not applicable; this is a localization feature PR rather than a bug report. Current main lacks Polish, while the diff and screenshots establish the changed behavior path.

Is this the best way to solve the issue?

Yes for implementation shape: the PR follows the existing AppLanguage, catalog, and localization-test pattern. The remaining question is product and native-language quality acceptance before exposing Polish automatically to System-language users.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 3263f0476d05.

Label changes

Label justifications:

  • P2: This is a normal-priority localization feature with limited runtime blast radius but a real merge-readiness gate.
  • merge-risk: 🚨 compatibility: Merging adds pl.lproj, which can automatically switch Polish System-language users from English fallback to Polish UI after upgrade.
  • 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 posted screenshots, and the inspected images show Polish selected and rendered in the main menu plus settings panes.
  • proof: sufficient: Contributor real behavior proof is sufficient. The contributor posted screenshots, and the inspected images show Polish selected and rendered in the main menu plus settings panes.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The contributor posted screenshots, and the inspected images show Polish selected and rendered in the main menu plus settings panes.
Evidence reviewed

What I checked:

  • Repository policy read: The repo-local AGENTS.md was fully read; its focused localization-test guidance, no-Keychain validation guidance, and release-owned changelog guidance informed this review. (AGENTS.md:1, 3263f0476d05)
  • Current main does not already implement Polish: Current main's AppLanguage enum includes Indonesian as the last selectable language and has no Polish case, so this PR is not obsolete on main. (Sources/CodexBar/PreferencesGeneralPane.swift:23, 3263f0476d05)
  • PR head registers Polish: PR head bdb5d1f adds case polish = "pl" and maps it to language_polish in the existing language-picker pattern. (Sources/CodexBar/PreferencesGeneralPane.swift:24, bdb5d1f2a37d)
  • PR head adds focused catalog coverage: The PR adds language_polish to language-key coverage and adds a Polish catalog parity test with representative Polish UI strings. (Tests/CodexBarTests/LocalizationLanguageCatalogTests.swift:25, bdb5d1f2a37d)
  • Polish catalog completeness check: A PR-head comparison found 1,047 English keys and 1,047 Polish keys with equal key sets; 46 values remain identical to English, far below the earlier blocked revisions. (Sources/CodexBar/Resources/pl.lproj/Localizable.strings:1, bdb5d1f2a37d)
  • Maintainer discussion context: Owner comments documented the earlier product blocker as translation completeness, not structure; the latest catalog comparison addresses that blocker enough to leave native-quality acceptance as the remaining review gate.

Likely related people:

  • steipete: Current blame points the language picker and localization bundle infrastructure to Peter Steinberger, and PR discussion/commits show owner rebase and Polish parity work on this branch. (role: recent area contributor and reviewer; confidence: high; commits: 9d3c354df9ba, b376beeaa9c0, c819b0fba145; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Localization.swift, Sources/CodexBar/Resources/pl.lproj/Localizable.strings)
  • Yuxin-Qiao: Besides authoring this PR, Yuxin Qiao has merged main-branch localization work for Italian that touched the same AppLanguage, catalog, and test pattern. (role: adjacent localization contributor; confidence: high; commits: 3b5f5234c9fa, 1d7e744ed810, 749ef58dc857; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Resources/it.lproj/Localizable.strings, Sources/CodexBar/Resources/pl.lproj/Localizable.strings)
  • Stevanus Pangau: The recent Indonesian localization merge on main uses the same selectable-language, catalog, and test path this PR extends. (role: adjacent localization contributor; confidence: medium; commits: a174d1710d1d; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Resources/id.lproj/Localizable.strings, Tests/CodexBarTests/LocalizationLanguageCatalogTests.swift)
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.

@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: 545c87d4ab

ℹ️ 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 on lines +1 to +6
/* English localization for CodexBar (base/fallback) */

" providers" = " providers";
"(System)" = "(System)";
"30d" = "30d";
"A managed Codex login is already running. Wait for it to finish before adding " = "A managed Codex login is already running. Wait for it to finish before adding ";

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Translate the Polish strings before enabling Polish

When users select the new Polish language, localizedBundle() will load this pl.lproj file, but the file is still mostly the English/base table (864 of 1029 entries match English, starting with the provider/login/account strings here). That makes the newly advertised Polish option render large parts of the app in English rather than Polish; translate these entries before shipping the language option.

Useful? React with 👍 / 👎.

@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. P2 Normal priority bug or improvement with limited blast radius. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. labels May 31, 2026
@Yuxin-Qiao

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Addressed in latest commits (c87caae, 891fd90), with additional Polish localization updates across key user-facing surfaces.

Proof (Polish selected in app)

1) Menu popup (core usage card + actions)

ABF7A6B1-97F4-4A90-ADAB-3A67B6462012

2) General settings pane

05E3127A-3371-4355-A166-CCD7D572D84A

3) Providers pane

C9BDD9C6-E59A-4F84-A3DB-00B3FBDCFA19

4) Display settings pane

5C15844C-1C1D-457C-847A-9B4D2996072E

5) Advanced settings pane

6AA402A5-2FA3-4983-915D-9AE53D6B45EC

Notes

  • Polish is explicitly selected.
  • Updated many remaining menu/chart/action strings that previously fell back to English.
  • Hidden is still intentionally left as-is for now (tracked separately).

@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:

@Yuxin-Qiao Yuxin-Qiao changed the title Add native Polish app language support Add native Polish localization support Jun 1, 2026
@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 1, 2026
@Yuxin-Qiao
Yuxin-Qiao force-pushed the feat/polish-native-localization branch 2 times, most recently from 034add6 to d948204 Compare June 7, 2026 13:20
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jun 7, 2026
@Yuxin-Qiao
Yuxin-Qiao force-pushed the feat/polish-native-localization branch from f949d99 to 25ac8f2 Compare June 11, 2026 07:04
@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed 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. labels Jun 11, 2026
@steipete
steipete force-pushed the feat/polish-native-localization branch from 25ac8f2 to 618ebe6 Compare June 11, 2026 15:08
@steipete

Copy link
Copy Markdown
Owner

Rebased and updated the PR head to 618ebe62.

Completed:

  • rebased onto current main
  • restored exact English/Polish catalog key parity: 1038/1038 keys
  • translated five keys added or renamed since the original branch
  • added the unreleased changelog credit
  • focused localization/UI tests: 9 passed
  • make check: clean

Autoreview found one remaining merge blocker: 814 of 1038 Polish values are still exact English placeholders, leaving only 224 translated entries. Existing selectable non-English catalogs have roughly 990 or more translated values. This PR should stay open until the Polish catalog is substantially complete and native-quality; I am not auto-merging it in the current state.

@Yuxin-Qiao
Yuxin-Qiao force-pushed the feat/polish-native-localization branch 2 times, most recently from bb31f02 to 4a1b066 Compare June 12, 2026 16:05
@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 12, 2026
@clawsweeper clawsweeper Bot added 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: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 14, 2026
@steipete
steipete force-pushed the feat/polish-native-localization branch from 7de4618 to 292b53d Compare June 15, 2026 05:29
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed 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 15, 2026
@steipete
steipete force-pushed the feat/polish-native-localization branch from 292b53d to 419273e Compare June 15, 2026 06:15
@clawsweeper clawsweeper Bot added 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: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jun 15, 2026
@steipete
steipete force-pushed the feat/polish-native-localization branch from 419273e to 88e1ee5 Compare June 15, 2026 07:09
Yuxin-Qiao and others added 12 commits June 15, 2026 03:12
- Add 'language_polish' to languageKeys in LocalizationLanguageCatalogTests
  so the new case in AppLanguage matches the test's expected key set.
- Add 'language_polish' entry to fr/nl/uk/vi lproj (the four lproj
  added to main after the original Polish PR was opened) so the
  per-catalog coverage check passes.
- Add missing language_french/dutch/ukrainian/vietnamese to pl.lproj
  with Polish translations so pl.lproj is also covered by the test.
…talogs)

After rebasing onto origin/main, the invariant test
'localized catalogs include every app language label' requires every
lproj to contain every language_<X> key. Add language_japanese to
pl.lproj and language_polish to ja.lproj.

No-op for app behavior; only catalog parity for invariant.
@steipete
steipete force-pushed the feat/polish-native-localization branch from 88e1ee5 to bdb5d1f Compare June 15, 2026 07:12
@steipete
steipete merged commit c303b67 into steipete:main Jun 15, 2026
4 checks passed
@Yuxin-Qiao
Yuxin-Qiao deleted the feat/polish-native-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

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal priority bug or improvement with limited blast radius. 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