Documentation
StringLane Documentation
StringLane is a desktop localization editor: an IDE for your translation files. Open a folder of ARB, Apple .strings, .xcstrings, Android XML, or i18next JSON, see every locale side-by-side, validate ICU MessageFormat as you type, and AI-translate with your own API key. These guides take you from your first edit to advanced ICU plurals.
Step-by-step walkthroughs: start here if you're new.
Getting Started
Download, install, and make your first translation edit in under 10 minutes.
Read guideTutorialSet Up AI Translation in 5 Minutes
Configure a provider, add your API key, and translate your first key: no cloud account required beyond the AI provider itself.
Read guideTutorialWorking with ICU Plurals and Select Forms
Write, validate, and fix ICU MessageFormat plural and select strings directly in StringLane, without leaving the editor.
Read guideTutorialLocalize Your Flutter App End to End
A complete workflow from Flutter ARB setup through AI translation, validation, and running flutter gen-l10n.
Read guideTask-focused guides: find what you need and get it done.
How to Open a Localization Project
Three ways to open a localization folder in StringLane, what auto-detection covers, and how multi-module Android + namespaced i18next projects load.
How to Add a New Locale
Create a new locale in StringLane by entering its BCP 47 code. What file gets created, and what happens on multi-package projects.
How to Use Locale Presets
StringLane ships built-in cultural context for 50 locales and applies it to AI translation automatically. What each preset covers, which locales have one, and how to override it.
How to Configure Guarded Words and Product Context
Tell StringLane what not to translate and how your product sounds, so AI translations match your brand.
How to Configure Locale Context for Better AI Output
Add per-locale cultural notes so AI translations feel natural for each region, not just grammatically correct.
How to Use the List View Editor
Navigate the key sidebar and detail pane: switch between Grid and List layouts, track validation at a glance, and edit every locale for one key in one place.
How to Use the Format Editor
Format-specific editing helpers for iOS .strings, Android XML, and i18next JSON projects in StringLane.
How to Use the Command Palette
Press ⌘P to open one searchable menu for every StringLane action: add keys, translate, jump to a key, toggle panels, open settings.
How to Customize Keybindings
Rebind any of StringLane's in-app keyboard shortcuts from Settings → Keybindings. Export / import JSON to share setups across machines.
How to Search and Filter Translations
Find keys by name or content, filter to issues only, or show only missing translations for a specific locale.
How to Translate Individual Keys
Use the per-cell AI translate button to translate a single key in any locale.
How to Translate All Missing Cells at Once
Fill every gap across every non-base locale in one pass. Palette-driven, progress-tracked, cancellable.
How to Bulk-Translate a Locale
Fill all missing translations in a locale with one click, with progress tracking and cancel support.
How to Translate with a Local LLM (Ollama, LM Studio, Jan)
Run AI translation entirely on your machine. Configure Local LLM (OpenAI-compatible) in Settings → AI Providers and point StringLane at any local OpenAI-compatible runner.
How to Read Validation Badges
What each validation badge means (Missing, Same, Param, Length, ICU, Guarded, and Malformed) and how to fix them, including the one-click wrench autofix.
How to Use the Issues Panel
Press ⌘J to open one panel listing every validation problem across the project: click to jump, fix per row, or sweep all with AI.
How to Fix Placeholder Mismatches
Understand and resolve the Param validation badge: when a placeholder like {name} or %@ is missing or wrong in a translation.
How to Fix Issues with AI
Repair ICU syntax errors, missing plural categories, and placeholder mismatches without retranslating: per row or across the project.
How to Work with ARB Metadata Annotations
What @description, x-max-length, x-guarded and x-no-translate mean in ARB files, and how StringLane reads and uses them.
How to Add Key Descriptions and Limits on Any Format
Add a description, character limit and translation rules to a key in an .xcstrings, .strings, Android XML or i18next project — not just ARB.
How to Reload Files from Disk
Press ⌘R to discard pending writes and re-read every locale file from disk: useful after git checkout, branch switch, or external edits.
How to Activate Your License Key
Enter your StringLane license key to unlock the full app: one-time purchase, no subscription, your key lives in your OS keychain.
How to Use the Free Trial
Every StringLane feature is available during the 14-day free trial: no email, no credit card, no missing functionality.
How to Turn Off Usage Analytics
What StringLane sends, what it never sends, and where the one toggle is that stops it. Your translation content never leaves your machine either way.
Background on the file formats and standards StringLane works with.
What Is an ARB File? Flutter's Localization Format
ARB is the JSON-based translation format Flutter uses for app localization. How the format works (keys, placeholders and @ metadata) and how to edit it.
What Is ICU MessageFormat? Plurals and Select Explained
ICU MessageFormat is the standard syntax for strings that change with a number or a choice: plurals, select and placeholders. How it works, and where it bites.
What Is the .xcstrings Format? Xcode String Catalogs
String Catalogs (.xcstrings) are Apple's localization format: one JSON file holding every locale plus a per-string translation state. How to edit it.
What Is a .stringsdict File? iOS Plurals and Width Variants
A .stringsdict is the XML plist that holds iOS plural forms and width-adaptive strings next to your .strings file. What is inside it, and how to edit it safely.
Where Key Metadata Is Stored: .stringlane/metadata.yaml
Which annotations your locale files keep themselves, what goes into .stringlane/metadata.yaml, and why that folder belongs in your repository.