Skip to content

Localization

4Notice ships in seven languages: en, de, fr, es, it, ja, zh-Hans. The whole step was one ticket and one commit (“Localize the UI into seven languages”) — because the groundwork made it mechanical.

All UI text lives in a string catalog (Resources/Localizable.xcstrings) — for 4Notice, 30 keys. The supported languages are declared once, in project.yml, so the generated Xcode project always agrees:

options:
developmentLanguage: en
knownRegions: [en, de, fr, es, it, ja, zh-Hans]

The ticket’s acceptance criteria said it plainly: all UI text in the catalog, orphan-strings reports nothing, app checked in de and en. “No hardcoded texts” is not a style wish — it’s what makes the next two steps checkable.

2. The agent translates — with a marked caveat

Section titled “2. The agent translates — with a marked caveat”

The translations themselves were agent work, all seven languages in one run. The honest part is in the ticket’s notes, verbatim:

ja/zh-Hans are agent translations — have them proofread once before the store.

That’s the pattern for using an agent on judgment work: take the speed, record the uncertainty where it will be seen again (the ticket), and schedule the human check before it matters (the store listing, not the commit).

Here the imported release-checks skill pays off. orphan-strings — one of the three tools the agent implemented and verified earlier — lists every catalog key that no Swift source references literally:

Terminal window
echo '{"catalog": "Resources/Localizable.xcstrings",
"sources": ["Sources"]}' \
| python3 .agent/tools/orphan-strings/macos.py
# → {"ok": true, "orphans": []}

An empty list is the goal, but a non-empty one is candidates, not facts — a key built by string interpolation shows up here too, so each hit gets confirmed before deletion (the skill says so; that’s why it reports instead of fixing).

For 4Notice: no orphans, visual check in German and English, ticket Done. Store metadata per language is a separate concern — it belongs to fastlane, where screenshots for all seven languages are generated in one automated run.