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.
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
- 1Add your source-language strings to nlit as keys (import your existing files, or start fresh).
- 2Run AI auto-translate into every target language — the credit cost is shown before each run, and your glossary keeps brand terms intact.
- 3Review and approve, then pull the files into your repo with the CLI.
# .nlit.yaml
format: xcstrings # or: strings / stringsdict
output_dir: .
platform: ios
languages:
- de
- fr
- jade.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.