Skip to content
StringLane

Desktop app macOS, Windows, Linux

See every locale at once.

Every language side by side, problems flagged on the cell, every edit saved straight to your files. The localization editor for iOS, Android, Flutter and web apps.

For macOS, Windows and Linux14-day trial, no email · $49 once

The StringLane app on cart.itemCount, a plural string in an iOS project: one card per language with its plural forms, a red 2 MISSING badge on the key, and the Spanish and Ukrainian cards each offering the CLDR-required form they lack.

Spanish needs “many”. English never did.

Built for locale files, not bolted onto an editor.

  • Add a key once

    It lands in every locale file, ready to translate.

    The key notifications.newFollower in list mode, one row per language: English, German, Spanish and French are translated, and the Japanese row is flagged MISSING.
  • Broken strings come with a fix

    Missing and broken strings are listed with a Translate or Fix with AI button, using your own AI key.

    The Issues panel: a Placeholder mismatch on the French home.welcomeBack with a Fix with AI button, and a Missing translation for Japanese with a Translate button.
  • Keys your code no longer calls

    It reads your source and shows where each key is used. Reported, never deleted.

    The key home.welcomeBack with "Used in 3 places" and the three Swift files and line numbers that call it, above its English, German and French cards.
  • Plurals, done by the rules

    Each language gets the CLDR forms it needs, and nothing it doesn’t.

    The plural forms of cart.itemCount: the Spanish card has one and other, and a highlighted + many button marked CLDR-required, the form Spanish is missing.

What it checks, in every language.

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

  • Missing keys

    Per locale, and per plural form the language needs.

    missing_key
  • Placeholders

    {name}, %@ and %lld survive translation.

    placeholder_mismatch
  • Plural forms

    Every form the language’s CLDR rules need, in every locale.

    same_plural_forms
  • 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
  • Stale translations

    A translation made before its source text changed, once source stamps are on.

    translation_stale

Two fixes, one diff.

Open a sample iOS project, fix a dropped placeholder and a missing Spanish plural form by hand, then read the git diff.

74 seconds, no sound. Every step is captioned on screen.

Screen recording of the StringLane app on a sample iOS project. The French greeting has lost its %@ placeholder and Spanish has no many plural form. Both are typed back in by hand, then a plain git diff of Localizable.xcstrings shows the change.

Opens the files you already have.

Price

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. The trial needs an internet connection at every launch.

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

Getting started with the desktop app

Will StringLane modify or reformat my localization files?
No, not in any of the five formats. StringLane reads your files, writes your edits back, and leaves everything else alone: ARB @key descriptions and key order, iOS .strings quoting style and comments, .xcstrings JSON shape, Android XML formatting and <plurals> ordering, i18next nested-vs-flat layout and CLDR suffix convention. It saves in the same format it found. Open the same file in VS Code before and after: the diff shows only the lines you actually changed. One exception: in an iOS project with several modules, the first save that writes the catalog can add a /* Localizable.strings */ header line to a .strings file that has none.
What happens to my files if I uninstall StringLane?
Nothing. They stay exactly where they are, valid and unmodified. StringLane writes directly to your source files the whole time, so there is no export step and no proprietary format to escape. Your Flutter project, Xcode project, or Android project has no idea StringLane ever existed. It works fine without it.
I already translate with ChatGPT or Claude. Why would I need this?
Keep doing that. StringLane is the layer that workflow is missing. It opens every locale file in your project at once, so there's no context window to overflow and no truncated output at 40 languages. Gaps, broken placeholders, and ICU errors are flagged live, and bulk-fill runs on your own key from the same provider (a one-time setup): no per-language copy-paste loop, no re-sending whole files through a chat window. Every change is written straight into your files, so your git diff shows exactly what the AI changed.
Where do my strings go when I use AI translation?
Directly to whichever of the eight providers you configure: OpenAI, Anthropic, Google Gemini, Groq, Mistral, DeepSeek, xAI, or the Local LLM provider (any OpenAI-compatible runner: Ollama, LM Studio, Jan, llama.cpp, vLLM). The cloud providers use your own API key. Your strings never pass through a StringLane server. The only StringLane server the app talks to is our license server, for the trial and license checks (a device ID and your license key), update checks, and usage events you can switch off, and none of those carries your strings. Pick the Local LLM provider and your data never leaves your machine. All eight providers use structured-output enforcement (JSON Schema, tool calls, or response schema) so bulk translations parse reliably end-to-end. Setting up AI translation takes about five minutes.
Is ARB the main format and everything else an afterthought?
All five formats are first-class: ARB (Flutter), .strings (iOS), .xcstrings (Xcode 15+ String Catalog), Android XML, and i18next JSON. The core parser for each was built and tested independently, not shimmed on top of a JSON converter. You can open a mixed project and see missing keys flagged the same way across all of them. Plurals work per-format in their native shape: ICU for ARB and i18next, Apple variations for xcstrings, .stringsdict for iOS, and <plurals> for Android. If you're new to either: what the .xcstrings format is and what an ARB file is.
Does StringLane run on Windows and Linux, or just macOS?
All three, today: macOS (Apple Silicon and Intel, signed and notarised by Apple), Windows x64, and Linux (a self-updating AppImage, or a .deb if you prefer your package manager). One honest caveat: the Windows build isn't code-signed yet, so SmartScreen shows an “unknown publisher” warning on first run: click “More info” → “Run anyway”. Checksums for every build are published alongside the downloads.

Let your coding agent use the same checks.

Free. Paste this into Claude Code, Cursor, Codex or five other agents.

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