Continuous Localization in CI for Mobile Apps: CLI + GitHub Actions

By The strings.dev team · Last updated

Frequently asked questions

What does continuous localization mean for a mobile app?

It means new and changed user-facing strings get translated automatically as part of your normal git/CI pipeline, instead of being batched into a manual export-and-import cycle that lags behind releases. For an indie app it's small: a per-project CLI or REST key, invoked from a git hook or a CI step, that pushes changed strings and pulls native translated files back into the repo.

How do I set up a localization GitHub Action?

Add a workflow triggered on pushes that touch your localization files (a paths filter for **/*.xcstrings and **/res/values/strings.xml), store your per-project key as the STRINGS_PROJECT_KEY secret, run the strings.dev CLI to push source and pull translations, then commit the results back with contents: write permission. The full YAML is in this guide; exact CLI command names are in docs.strings.dev.

Does it re-translate my entire catalog on every push?

No. strings.dev works from per-string state — Apple's String Catalog already tracks a state per string — so already-translated, unchanged strings are treated as done. A push that adds three keys sends only those three for translation, which keeps CI runs fast and avoids re-spending word translations on settled work.

Can I run this on the free tier?

Yes. The free Indie tier includes 1 project and 1 language with unlimited word translations, which is enough to run the full CLI/CI loop for your first locale. Fanning out to more than one language, using a second project, or turning on the QA & analytics dashboard requires Indie Plus at $20/mo, or $10/mo billed annually.

Should I use a git hook or CI?

Use a git hook (pre-push) for a solo project when you want translations synced before a push ever leaves your machine, with no external infrastructure. Use CI (a GitHub Actions workflow) for shared repos, since hooks aren't version-controlled and a workflow runs the same way for everyone who pushes. Both call the same per-project CLI and key.

Can an AI agent run the localization loop instead of a script?

Yes. The strings-mcp-server MCP package plus a generated AI-skill prompt let an MCP-capable agent (Claude, Cursor, Copilot) drive push-translate-pull using the same per-project key as the CLI. It's the agentic path to the same pipeline — covered on the AI localization page — so you can start with a CI workflow and move to an agent later without changing projects or keys.

Related

Start free with one language