Skip to content
StringLane

Every language checked before it ships.

StringLane is a localization editor for iOS, Android, Flutter and web apps. See every locale side by side, and catch the broken placeholder in the language you can’t read.

Download for macOS

For macOS, Windows and Linux14-day trial, no email · The agent setup is free

The StringLane editor open on a sample iOS project: one key in several languages side by side, and the Issues panel listing each finding with a Translate or Fix with AI button.

Every issue listed with its fix

Works with the files and tools you already use

WHY A GREEN BUILD IS NOT ENOUGH

What AI gets wrong, and your compiler never sees.

Your agent translates thirty languages in a minute. These three slip through every build, and StringLane flags each one before it ships.

  • en{count} items selected
  • jaアイテムを選択しました
  • ↳ {count} is gone

A placeholder vanishes

The number was in the English. The translation dropped it, so every user sees a sentence with no count.

placeholder_mismatch
  • one{count} елемент
  • few{count} елементи
  • manymissing
  • other{count} елемента

A plural form is missing

English has two forms. Ukrainian needs four. The model wrote three, so a count like 5 gets the wrong ending.

missing_key
  • enCheckout
  • deZur Kasse
  • frPaiement
  • komissing

A key never arrived

You added a string last week. Twelve languages have it. One does not, and it ships in English.

missing_key

It also checks

Structure, not taste. Whether a sentence reads well is still yours.

  • ICU syntax

    Unclosed braces and broken selects, before the build does.

    icu_parse_error
  • Guarded terms

    Flags a brand or product name that got translated.

    guarded_word_violation
  • Length limits

    Per-key budgets, so a German label still fits its button.

    max_length_exceeded

ONE KEY, EVERY FILE

Add a key once.

Type it in one place and it lands in every locale file, ready to translate.

The StringLane detail view for the key errors.unauthorized: a notice that no call site was found in the code, the English source with Spanish, French and Ukrainian translations filled in, and German and Japanese flagged MISSING.

TRANSLATE

Use the model you already pay for.

Bring your own OpenAI, Anthropic or Gemini key, or run a local model. Every result is checked as it lands, so a dropped {count} shows on the cell, not in your release.

StringLane settings on the AI Providers page: the provider set to a local model that is OpenAI-compatible, the model llama3.2, and a local server base URL of localhost:11434.

YOUR REPO

Your files. Your git diff.

No import, no export, no cloud copy. StringLane edits the files already in your repo, in their own format, so review is an ordinary diff.

A git diff of Localizable.xcstrings after editing in StringLane: 13 lines added and 1 removed, one French value changed to include the %@ placeholder, and German and Japanese entries added.

FREE · IN YOUR CODING AGENT

Or let your coding agent do it. Safely.

The free CLI gives Claude Code, Cursor, Codex and five other agents the same checks over MCP. Your agent translates, StringLane checks, and a failed check writes nothing to your files.

Paste this into your agent

Read https://stringlane.app/docs/cli/agent-setup.md and set up StringLane for this project.

It works out which agent it is in, and the setup page tells it to propose each command and wait for your yes.

claude · my-appIllustrative session

> add the checkout strings in every language

stringlane · add_keycheckout.total

stringlane · prepare_translation_plan→ 29 locales

translating 29 entries…

stringlane · validate_translations

28 pass · 1 refused: uk has no “many” form

fixing uk… validate_translations: all pass

Allow stringlane · apply_translations to write 30 files?

1. Yes2. No, and tell the agent why

  1. In your coding agent

    Eleven tools, six of them write, and a failed check writes nothing to your files.

    stringlane setup mcp --host claude-codeAgent setup guide
  2. In CI

    Exit 1 fails the build on a broken locale. A committed baseline lets a messy project adopt the gate today.

    stringlane check . --jsonCI guide
  3. In your terminal

    The read-only way to try it: it reads every locale and writes nothing into your repo.

    npm install -g @stringlane/cliGetting started

Pay once for the app. The CLI is free.

Desktop app

$49once

  • 14-day trial, no email, no card
  • macOS, Windows and Linux
  • 3 machines, updates in the major version
  • Your own AI key, or a local model

Early-adopter price, $79 after launch.

CLI & agents

$0free

  • Terminal, CI and MCP
  • Claude Code, Cursor, Codex and 5 more
  • No key, no activation
  • Separate from the app licence

Lokalise starts at $144 a month (checked July 2026). StringLane sells no AI credits.

Frequently asked questions

Does StringLane upload my localization files anywhere?
No. No StringLane server ever receives your localization files or your strings. The one StringLane server either surface talks to is our license server: the desktop app uses it for the trial and license checks (a device ID and your license key) and for update checks, and both surfaces send it usage events that never include your keys, paths or strings, which you can switch off. The desktop app and the stringlane CLI both read and write the files already in your repository, so every change lands in your working tree and shows up in an ordinary git diff. Two deliberate exceptions, both opt-in and both yours: AI translation sends the strings being translated to the provider whose key you configured (or to a local model, in which case nothing leaves the machine), and the MCP server hands your strings to the coding agent that started it, running on your machine over stdin and stdout.
Does it check how a translation looks in the app?
No. StringLane checks what can be checked without running your app or speaking the language: missing keys per locale and per plural form, placeholders, ICU and plural structure against CLDR, guarded terms and length limits. Whether a German string fits its button or a Japanese sentence reads naturally is the human step, and the desktop app's side-by-side view with its character-width preview is where you do it. What each badge means.
Which file formats are supported?
Five, identically on both surfaces: iOS .strings with its companion .stringsdict, Xcode .xcstrings String Catalogs, Flutter/Dart ARB, Android XML, and i18next JSON. Each parser was built and tested independently rather than shimmed on top of a JSON converter, and plurals work in each format's native shape.
Can I keep using Claude Code or another agent to do the translating?
Yes, and that is the intended shape. stringlane mcp serves your project to any agent that speaks the Model Context Protocol: the agent's own model writes the translations, and StringLane does the reading, the validating and the writing, including creating the keys a new component references. No provider key is involved. Claude Code and Codex CLI install it as a plugin, which brings a write guard with it; Gemini CLI takes an extension; and for Cursor, Zed, OpenCode, VS Code Copilot and Windsurf, stringlane setup mcp --host <host> prints the entry in that host's own shape and names the file it goes in. Cursor can also load the StringLane plugin as a local copy, which is not in the Cursor Marketplace and has not yet been run inside Cursor. Set up your agent.

Check your locales tonight.

Download for macOS

For macOS, Windows and Linux14-day trial, no email · The agent setup is free