iOS localization guide

How to localize an iOS app

Modern iOS apps localize with String Catalogs (.xcstrings, Xcode 15+); older projects use .strings and .stringsdict. You reference strings in code and Xcode resolves them per locale. Here’s the setup, plus how to auto-translate and sync.

i18n in iOS

The usual setup uses String Catalog (.xcstrings). With a String Catalog, you call String(localized:) (SwiftUI) or NSLocalizedString in code, and Xcode stores each language in a single .xcstrings file. nlit exports .xcstrings (and classic .strings / .stringsdict) so the file drops straight into your project.

ContentView.swiftswift
import SwiftUI

struct ContentView: View {
  var body: some View {
    // Resolved from Localizable.xcstrings at runtime
    Text("greeting \(name)")
  }
}
// or: String(localized: "greeting")

Translate it with nlit

  1. 1Add your source-language strings to nlit as keys (import your existing files, or start fresh).
  2. 2Run AI auto-translate into every target language — the credit cost is shown before each run, and your glossary keeps brand terms intact.
  3. 3Review and approve, then pull the files into your repo with the CLI.
.nlit.yamlyaml
# .nlit.yaml
format: xcstrings    # or: strings / stringsdict
output_dir: .
platform: ios
languages:
  - de
  - fr
  - ja
nlit pull → writessh
de.lproj/
  Localizable.strings
fr.lproj/
  Localizable.strings
ja.lproj/
  Localizable.strings
# (.xcstrings consolidates languages into one catalog)

Format for iOS: xcstrings. See the CLI docs for every format and flag.

Things to watch for

  • Placeholders: nlit rewrites {{name}} to iOS %1$@ / %1$lld automatically based on the platform tag — you don’t convert formats by hand.
  • Plurals: use .stringsdict (or the String Catalog’s plural variations) with nlit’s plural keys for correct CLDR forms.
  • Set the right platform tag on keys so iOS-only strings export with iOS placeholder syntax.

FAQ

Should I use String Catalogs or .strings for a new iOS app?

String Catalogs (.xcstrings) are the modern default in Xcode 15+. nlit exports .xcstrings, classic .strings, and .stringsdict, so either workflow is covered.

How do I auto-translate an iOS app?

Add your base-language strings to nlit, run AI auto-translate, review, then pull the .xcstrings or .strings into your project with the CLI.

Does nlit handle iOS placeholder syntax?

Yes. Keys tagged for iOS export with %1$@ / %1$lld style placeholders automatically — no manual conversion.

Ship iOS in every language

Auto-translate your strings and pull them into your build. Free to start, no card.