StringLane

    Type to search titles, sections and body text across all 58 pages.

    How-To

    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.

    Last updated

    Adding a locale creates a new localization file in your project folder. The new locale then appears alongside every other one in the detail pane, and in the Issues panel.

    Steps#

    1. With a project open, click + Add Locale in Settings → Project → General, below the locale list.
    Settings → Project → General: project name, file format, base locale, the Source stamps section with Track stale translations off, and the Locales list with a Remove link per locale and the + Add Locale button beneath it
    1. The Add New Locale dialog asks for one thing: a Locale Code in BCP 47 form: de, fr-CA, zh-Hans, pt-BR.

    2. As you type, StringLane shows the file it is about to create (Will create: app_it.arb). It rejects codes that are malformed or already in the project, and Create Locale stays disabled until the code is valid.

    Add New Locale dialog: a single Locale Code field with the will-create filename preview beneath it, and Cancel / Create Locale buttons

    There is no language picker. You type the code, not a language name. "French" will not resolve to fr. If you are unsure of a code, the IANA subtag registry is the authority; the short answer is usually the two-letter ISO 639-1 code, optionally plus a region (pt-BR) or script (zh-Hans).

    Multi-package projects#

    If your project spans several packages or namespaces (a multi-module Android app, or an i18next setup with separate namespace folders), the dialog also shows a Packages list with a checkbox per origin, and a filename preview for each.

    Tick the ones that should get the new locale. StringLane remembers your selection and pre-ticks the same set next time. See How to Open a Localization Project for how multi-origin projects are detected.

    Translate it straight away#

    The moment the file is created, StringLane offers a Translate New Locale prompt: "Would you like to AI-translate all keys into it now?" Keys marked not for translation, and strings Xcode marks Stale, are left out of it. A new Android regional override (below) gets no prompt, because it owes no strings.

    • Translate Now starts a bulk translation into the new locale immediately. It is disabled until an AI provider is configured. See Set Up AI Translation.
    • Later dismisses it. You can always run the same thing afterwards from the ✨ Translate… popover in the sidebar footer.

    What gets created#

    StringLane creates a new localization file in your project using the same format and naming convention as your existing files:

    • ARB: app_fr.arb alongside your existing app_en.arb
    • iOS .strings: fr.lproj/Localizable.strings
    • Android XML: res/values-fr/strings.xml. A region or script gets the folder name Android reads: fr-CA creates values-fr-rCA/, and zh-Hant creates values-b+zh+Hant/. Android does not read values-fr-CA/ as French (Canada), so StringLane never writes that name.
    • i18next JSON: fr/translation.json

    The new file is empty, so every key shows the red Missing badge for that locale. In a String Catalog, StringLane adds entries only for the strings the language needs, not for strings Xcode marks Stale or strings marked not for translation.

    Android regional overrides start empty#

    On Android, a regional locale such as fr-CA can override a language the project already has, here values-fr/. Android shows the parent language's string for every string the override does not define, so StringLane creates the override folder with no strings in it rather than an empty string per key, which Android would show as blank text. Its cells show the parent's text in italics until you type an override, and none of them is counted as missing. Add only the strings that differ. See How to Use the List View.

    The parent must match in language and writing script. zh-Hant-TW does not use values-zh/ as its parent, and de-AT has none when the project has no values-de/. Those get every key, empty, ready to translate.

    List View after adding a locale: every key shows a Missing badge for the new locale until it is translated

    After adding a locale#

    From here you can:

    • Bulk translate with AI: click ✨ Translate… in the sidebar footer and pick the new locale under Missing keys. See How to Bulk-Translate a Locale.
    • Give the AI regional guidance: 50 locales ship with built-in cultural context that is applied automatically. See How to Use Locale Presets.
    • Translate manually: click each cell and type your translation.
    • Check coverage: use the Missing filter in the search bar to see only untranslated keys.
    The StringLane app showing the key home.welcomeBack, used in three places in Swift files, with four locale cards: English, German and Japanese in place and French flagged PARAM.

    See every locale side by side

    The desktop app flags what is missing or broken on the cell, and saves to your files.

    Download for macOS

    14-day trial, no email