Localship
Allows localization of Android apps by finding, translating, and validating strings.xml resource files, including plurals, string arrays, placeholders, and escaping.
Writes translations in the format used by Android Studio, so Android string resources can be reviewed and edited directly in the IDE.
Supports Apple String Catalog (.xcstrings) files for localizing apps across Apple platforms like iOS, iPadOS, macOS, watchOS, and visionOS.
Allows localization of Django applications by translating gettext .po and .pot files, including plural forms.
Allows localization of iOS apps by translating Apple String Catalog files, with support for plurals and placeholders.
Allows localization of Linux applications that use gettext .po and .pot files for translations.
Allows localization of macOS apps by translating Apple String Catalog files, with support for plurals and placeholders.
Enables using local models through Ollama for translation, keeping translation data entirely on the local machine.
Allows localization of PHP applications that use gettext .po and .pot files for translations.
Allows localization of Python applications that use gettext .po and .pot files for translations.
Allows localization of WordPress themes and plugins by translating gettext .po and .pot files.
Writes translations in the format used by Xcode, so Apple String Catalog files can be reviewed and edited directly in the IDE.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Localshiplocalize my app for Hindi and Arabic"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π Localship
Translate your app with the AI you already use. Free, local-first, and every translation is checked before it's written.
Quick start Β· Formats Β· When to use it Β· AI tools Β· Reference
Ask your coding agent to localize your app. Localship finds your translation files, gives the AI the context it needs, checks every translation before it touches your files, and keeps everything in your repo.
You: Set up localization for this app.
Agent: Found 18 strings in app/src/main/res. Which languages do you want?
You: Hindi and Arabic.
Agent: Before translating, I drafted a short brief, voice notes and a glossary. Have a look.
You: Translate the app.
Agent: 36 translations written as drafts, 0 errors. Arabic has all six plural forms,
and "Jotter Pro" was kept as written.From the example app in examples/android-notes.
Early days. Localship is tested on real-world files (AndroidX resources, Django's translations, open-source String Catalogs) and a small example app, but it hasn't been used to ship a production app yet. Expect rough edges, and please open an issue when you hit one.
β¨ Highlights
π‘οΈ Catches broken translations. Missing or mismatched placeholders, missing plural forms, Android escaping and markup are checked in code before anything is written. Translations that fail go back to the AI with the reason.
π§ More context for the AI. Each string comes with the code that uses it, its comment, your glossary and voice notes, and translations of the same text elsewhere in your project.
π Your files stay yours. No server, no account, no upload. Translations go into the files your app already uses, formatted the way Android Studio and Xcode write them.
π€ Any model. Your coding agent's own model, or Claude, GPT, Gemini, OpenRouter, or a local model through Ollama.
πΈ Free. MIT-licensed. You pay only for your own AI tokens, or nothing with a local model.
β People stay in charge. Translations land as drafts for review. Hand edits and approved translations are never overwritten unless you ask.
π» Runs anywhere. macOS, Linux and Windows. As an MCP server, agent skills, or a CLI.
Related MCP server: i1n
π¦ Formats
Format | Used by | Status |
Android | Android apps (Kotlin, Java, Compose) | β Supported |
Apple String Catalog | iOS, iPadOS, macOS, watchOS, visionOS apps | β Supported |
gettext | Django, WordPress, Python, PHP, C, Linux apps | β Supported |
Flutter ARB | Flutter apps | ποΈ Planned |
JSON (flat, nested, i18next, ICU) | Web apps, React, Vue, React Native | ποΈ Planned |
Apple | Older iOS and macOS apps | ποΈ Planned |
XLIFF | Translation agencies, Angular | ποΈ Planned |
Android string arrays and plurals, String Catalog plural variations, and gettext plural forms are all supported. String Catalog substitutions and device variations come next.
π€ When to use it
Your coding agent can already translate a strings.xml file if you ask. Localship is for when
that stops being enough:
You localize continuously. It tracks what's new, what changed since it was translated and what someone edited by hand, so each run only does the work that's needed.
You have plurals and placeholders. Models regularly drop a
%1$s, miss Arabic or Russian plural forms, or leave an Android apostrophe unescaped. These are caught before they reach your files, not at build time or in production.You want consistency. A glossary, voice notes and earlier translations keep terms and tone the same across hundreds of strings and both platforms.
You don't want a cloud platform. Everything stays in your repo, with any model you like.
If you just need a handful of strings translated once, asking your agent directly is fine.
What the checks can't do is judge meaning or tone. That's what review is for.
π Quick start
1. Install in Claude Code:
/plugin marketplace add jigarfumakiya/localship
/plugin install localship@localshipUsing Cursor, Codex, VS Code or another tool? See Works with your AI tools.
2. Ask. Open your app's repo and say what you want:
π¬ Translate this app into Hindi and Arabic.
You get one short plan: what it found, what it will do, and the defaults it picked (like formality per language, and your app's name kept as written). Change anything in your reply.
3. Say "start translating". It sets everything up, writes a short brief, translates every string, checks each one, and reports back. No more questions unless something is truly blocked.
4. Review and ship.
π¬ Review the Arabic translations.
When you're happy, say "approve them" and build your app as usual. π
π§ Wherever you're starting from
Your app today | Just ask |
π Already has some translations | "Set up localization." Existing translations are kept and checked for real bugs, and you decide whether to trust or review them |
π Has strings, no translations yet | "Translate the app into French and German." |
π§± Text is written straight into the code | "Make this app localizable." The agent follows a step-by-step guide to move the text into |
β Adding a language later | "Add Japanese." |
βοΈ You changed some copy | "Update the translations." Only changed strings are redone, and the AI sees what changed |
πΏ New strings in a feature branch | "Translate the new strings." |
π§Ή You deleted or renamed strings | "Clean up old translations." |
π€ Works with your AI tools
Localship is an MCP server plus agent skills. Add the server to your tool, then ask in plain words as above.
{
"mcpServers": {
"localship": { "command": "npx", "args": ["-y", "github:jigarfumakiya/localship", "mcp"] }
}
}Tool | Where it goes |
Claude Code | The plugin above, or |
Cursor |
|
VS Code |
|
Gemini CLI |
|
Codex |
|
Claude Desktop | The JSON above, with |
β±οΈ The first start takes a minute while it installs; after that it's quick.
For agents that read skills (Claude Code, Codex, Cursor, Gemini CLIβ¦), add the step-by-step playbooks for setting up, making an app localizable, translating and reviewing:
npx skills add jigarfumakiya/localshipβ¨οΈ Without an agent
Everything also works from the terminal, which is handy for big apps and CI:
npm install -g github:jigarfumakiya/localship
localship plan hindi arabic # what it takes, before changing anything
localship start hi,ar --model anthropic:claude-sonnet-5-5 # set up and translate in one go
localship validate # exits 1 on errors: use it in CI
localship approveπ How it works
flowchart LR
A[π Your repo] --> B[π Find strings]
B --> C[π§ Batch + context<br/><sub>code usage Β· comments<br/>glossary Β· voice Β· memory</sub>]
C --> D[π€ AI translates<br/><sub>your agent or any model</sub>]
D --> E{π‘οΈ Checks<br/><sub>placeholders Β· plurals<br/>escaping Β· markup</sub>}
E -- fails --> D
E -- passes --> F[π Drafts in your files]
F --> G[π Review] --> H[β
Approved]Failed checks go back to the AI with the reason, so it can fix them. Translation state lives in a small lockfile next to your config, so the tool knows what's new, what changed and what someone edited by hand.
β Questions
Only to the AI you choose. There's no Localship server.
No. Hand edits and anything approved are never replaced unless you explicitly ask.
Any. Plural rules come from Unicode's CLDR data, so Arabic gets six plural forms, Russian three and Japanese one, automatically.
As good as the model and the context you give it. The brief, voice and glossary make the biggest difference. The checks catch mechanical errors (placeholders, plural forms, escaping), not wrong meaning, so review the drafts, ideally with a native speaker. See a real result in examples/android-notes.
Not for production yet. Setup, translation, checks, review and cleanup work for the three supported formats on macOS, Linux and Windows, with about 190 automated tests and real-world sample files. It hasn't been used to ship a real app yet, and translating through a model API hasn't been tried against a live provider. See the plan for what's next.
π£οΈ Roadmap
Android, String Catalog and gettext formats
Setup, translation with context, checks, review, approval and cleanup
MCP server, agent skills, Claude Code plugin
npm package (
npx localship)Tools to find hardcoded text in Kotlin and Swift
Flutter ARB, JSON and Apple
.stringsformatsGitHub Action for pull requests
AI reviewer with scores, and a review page for human translators
Store listings, and visual checks for cut-off or right-to-left text
π Learn more
π Reference: every command, option, config key, format detail and check
π§ͺ Example: a small app translated into Hindi and Arabic
π€ Contributing: development setup and how the code is laid out
πΊοΈ Plan and research: where this is going, and how it compares to paid tools
π License
This server cannot be deployed
Maintenance
Related MCP Connectors
Localize apps from your AI assistant: translate locale files, set glossaries, connect GitHub repos.
AI localization for agents: translation, TMS sync, translation memories, glossaries, post-editing.
Website localization, multilingual SEO, and automated content translation for AI agents.
Read Localazy projects, files, keys and glossary; submit translations, import keys, AI suggestions.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAI-powered translation management built for AI agents. Automate localization with regional sensitivity and zero TMS overhead. Works with Claude Code, Cursor, VS Code via MCP protocol. Supports JSON, YAML, Markdown, PO and more.9 npmMIT
- AlicenseNot gradedqualityBmaintenanceLocalization as code β push, pull, translate, and extract strings from code with AI. 7 MCP tools for type-safe i18n across 182 languages.72 npm2MIT
- AlicenseAqualityBmaintenanceAI localization from your editor β translate an app's string files into 46 languages with placeholder-safe, reproducible output. Eleven formats (JSON, .arb, .po, .strings, Android XML and more), and every translation is read back and checked before it lands.7MIT
- AlicenseNot gradedqualityCmaintenanceEnables localization of React, Next.js, and Vue apps from an AI assistant by managing projects, languages, translations, glossaries, style guides, and GitHub repository integration.MIT