String Catalogs are the source
Your .xcstrings files stay the single source of truth. Writes are byte-identical to Xcode's own, unknown fields round-trip, and git is your history. No second store to keep in sync.
A local-first localization tool for Xcode projects, written in Swift. It lints your code and String Catalogs, fixes unlocalized strings and translates with a local LLM, for iOS, iPadOS, watchOS, macOS and widgets. No hosted backend.
Pre-release. v0.5.0 was tested on a real app with 692 keys. It edits Swift files and String Catalogs, so commit first and review the diffs.
Your .xcstrings files stay the single source of truth. Writes are byte-identical to Xcode's own, unknown fields round-trip, and git is your history. No second store to keep in sync.
SwiftSyntax finds UI text that is never localized, plus missing, stale and broken translations. See warnings inline in Xcode, export SARIF for CI, or gate commits.
Unlocalized strings become semantic catalog keys with translator comments. Code is rewritten to Xcode's generated symbols or String(localized:), and every plan can be reviewed first.
Translate through Ollama or LM Studio on your Mac. Placeholders are protected, plurals follow CLDR, and results land as Needs Review. Approved strings are never overwritten.
An MCP server and a Claude Code skill let agents lint, fix, translate and manage keys. Every plan is checked again before it's applied.
One command turns .strings and .stringsdict files into String Catalogs. Every value, comment and plural rule is kept, and each value is checked before anything is written.
l10n-agent initDetect your targets, catalogs, languages and key scheme, and record what each existing translation was made from.
l10n-agent lintFind unlocalized text and missing, stale or malformed translations. It fails on warnings, so it works as a CI or pre-commit gate.
l10n-agent fix --applyAdd semantic keys with translator comments to the right target's catalog and rewrite the code to use them.
l10n-agent translateFill missing languages with your local model, then review and approve them in Xcode's String Catalog editor.