Skip to content

Add native Dutch localization support#1252

Merged
steipete merged 5 commits into
steipete:mainfrom
Yuxin-Qiao:feat/nl-localization-support
Jun 7, 2026
Merged

Add native Dutch localization support#1252
steipete merged 5 commits into
steipete:mainfrom
Yuxin-Qiao:feat/nl-localization-support

Conversation

@Yuxin-Qiao
Copy link
Copy Markdown
Contributor

Adds Dutch (nl) as a selectable app language and includes Dutch localization labels for the language picker.

@clawsweeper
Copy link
Copy Markdown

clawsweeper Bot commented May 31, 2026

Codex review: needs changes before merge. Reviewed June 7, 2026, 5:48 AM ET / 09:48 UTC.

Summary
The PR adds nl to the app language picker, introduces a Dutch Localizable.strings resource, and adds language_dutch labels to the existing localization tables.

Reproducibility: not applicable. this is a feature PR adding a new selectable app language, not a current-main bug report. The review defect is source-reproducible from the added Dutch string and the Amp provider action call site.

Review metrics: 2 noteworthy metrics.

  • Changed surface: 9 files, 1,074 additions, 0 deletions. Most of the patch is a new Dutch resource table, so review should focus on localization quality rather than architecture.
  • Catalog coverage: 0 missing keys, 0 extra keys, 0 placeholder mismatches. The earlier coverage blocker appears resolved structurally; the remaining blocker is translation content.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

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

Rank-up moves:

  • [P2] Fix the Amp action label to preserve the provider name.
  • Run the focused localization checks and make check after the correction.

Risk before merge

  • [P1] Full translation quality for the new 1,065-line Dutch table still needs maintainer or native-speaker review; source inspection only verifies structure, placeholders, and obvious product-name errors.
  • [P1] SwiftPM validation was not run during this read-only review, so the focused localization tests and make check should run after the repair.

Maintainer options:

  1. Decide the mitigation before merge
    Correct the Amp provider label, keep the structurally complete Dutch localization addition, then land after focused checks and maintainer acceptance of the remaining translation quality.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] A narrow automated repair can fix the definite provider-name mistranslation; broader Dutch copy quality remains maintainer or native-speaker review.

Security
Cleared: The diff only changes Swift localization enum wiring and .strings resources; no code execution, dependency, secret, CI, or supply-chain surface is touched.

Review findings

  • [P2] Preserve the Amp provider name — Sources/CodexBar/Resources/nl.lproj/Localizable.strings:200
Review details

Best possible solution:

Correct the Amp provider label, keep the structurally complete Dutch localization addition, then land after focused checks and maintainer acceptance of the remaining translation quality.

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

Not applicable: this is a feature PR adding a new selectable app language, not a current-main bug report. The review defect is source-reproducible from the added Dutch string and the Amp provider action call site.

Is this the best way to solve the issue?

No: the implementation shape is appropriate and the earlier key-coverage issue is fixed, but the PR should preserve the Amp provider name before merge.

Full review comments:

  • [P2] Preserve the Amp provider name — Sources/CodexBar/Resources/nl.lproj/Localizable.strings:200
    This action is shown for the Amp provider, but the Dutch string translates Amp to Versterker. That loses the product name users are trying to open and is inconsistent with the provider-name-preserving pattern in nearby strings, so keep Amp in this localized label.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.86

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P3: Native Dutch localization is a low-risk user-facing enhancement with limited blast radius.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): The PR discussion includes screenshots of the built app showing Dutch Preferences and menu UI after the change.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR discussion includes screenshots of the built app showing Dutch Preferences and menu UI after the change.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR discussion includes screenshots of the built app showing Dutch Preferences and menu UI after the change.
Evidence reviewed

Acceptance criteria:

  • [P1] swift test --filter LocalizationLanguageCatalogTests.
  • [P1] swift test --filter LocalizationBundleTests.
  • [P1] make check.

What I checked:

Likely related people:

  • Yuxin Qiao: Recent main history shows Yuxin Qiao added native French and Ukrainian localization support, including changes to PreferencesGeneralPane.swift, locale resources, and localization catalog tests. (role: recent localization contributor; confidence: high; commits: d3151b719e32, ae63897f3ee5; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Resources/fr.lproj/Localizable.strings, Sources/CodexBar/Resources/uk.lproj/Localizable.strings)
  • Peter Steinberger: Current-main blame attributes the base app language enum and English localization resource baseline to Peter Steinberger, and the PR timeline also shows recent Dutch-copy fixups from the same area. (role: localization surface introducer and recent adjacent contributor; confidence: medium; commits: 723734ef3422, 2075dc14f17e; files: Sources/CodexBar/PreferencesGeneralPane.swift, Sources/CodexBar/Resources/en.lproj/Localizable.strings, Sources/CodexBar/Resources/nl.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

Addressed the previous review points and added proof screenshots.

Updates

  1. Fixed the malformed Dutch localization entry (escaped quote around %@ in nl.lproj/Localizable.strings).
  2. Expanded Dutch localization coverage and verified UI rendering.
  3. Added visual proof from the built app (Preferences + menu UI in Dutch).

Proof

59F49D5E-C064-47A0-9FC8-9B11C2324A70 6D13E04A-6566-403A-9930-3DD91D0443EA 728B2A28-5BF5-469D-A385-3B5C86494A0C AF6D42A4-DF0F-4E70-B7EE-42488F0FA4CA 8A9F9885-5CF9-4CC0-84C1-DEA092FD405F

@clawsweeper please re-review.

@Yuxin-Qiao Yuxin-Qiao changed the title Localization: add Dutch app language support (nl) Add native Dutch 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. 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: 🧂 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 force-pushed the feat/nl-localization-support branch from 4a055b9 to 3cdd4dd Compare June 7, 2026 08:23
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jun 7, 2026
@steipete steipete force-pushed the feat/nl-localization-support branch from 3cdd4dd to 2075dc1 Compare June 7, 2026 09:42
@steipete steipete merged commit 1583d6c into steipete:main Jun 7, 2026
4 checks passed
@steipete
Copy link
Copy Markdown
Owner

steipete commented Jun 7, 2026

Autonomous landing proof for #1252.

Tested locally on exact head 2075dc1:

  • plutil -lint Sources/CodexBar/Resources/nl.lproj/Localizable.strings - passed
  • swift test --filter LocalizationLanguageCatalogTests - passed
  • swift test --filter LocalizationBundleTests - passed
  • git diff --check - passed
  • make check - passed; SwiftFormat reported 0/1015 files needing formatting, SwiftLint reported 0 violations / 0 serious in 1014 files
  • Codex autoreview - clean; no accepted/actionable findings after the Dutch picker-label, quota-suffix, and ElevenLabs-domain fixes

GitHub CI on exact head 2075dc1, run 27088947677:

  • GitGuardian Security Checks - SUCCESS, 32s
  • build-linux-cli (linux-arm64, ubuntu-24.04-arm) - SUCCESS, 5m24s
  • build-linux-cli (linux-x64, ubuntu-24.04) - SUCCESS, 6m33s
  • lint-build-test - SUCCESS, 30m46s

Landed via squash merge as 1583d6c.

No new verification image applicable: the autonomous changes were string/catalog corrections covered by resource lint, localization tests, autoreview, and CI; contributor screenshot proof remains on the PR.

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: 🦐 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants