Localizable.xcstrings is Apple's modern format for translations in Xcode, introduced at WWDC 2022. Upload it to SimpleLocalize, translate every language in one place, and export it back.
{
"version": "1.0",
"sourceLanguage": "en",
"strings": {
"hello_world": {
"comment": "Main greeting message for users",
"extractionState": "manual",
"localizations": {
"en": { "stringUnit": { "state": "translated", "value": "Hello World" } },
"es": { "stringUnit": { "state": "translated", "value": "Hola Mundo" } },
"fr": { "stringUnit": { "state": "translated", "value": "Bonjour le monde" } }
}
}
}
}Localizable.xcstrings is the successor to Localizable.strings and Localizable.stringsdict. Instead of one file per language spread across .lproj folders, every language for a key sits together in one JSON-based file, which makes it easier to see what changed in a diff.
Each key also carries a comment, an extraction state, and a per-language translation state, so a String Catalog already tracks more about a translation's progress than a plain key-value file ever could.
"search_label": {
"localizations": {
"de": {
"variations": {
"device": {
"mac": { "stringUnit": { "value": "Suche" } },
"other": { "stringUnit": { "value": "Finde" } }
}
}
}
}
}Beyond a plain string table
All localizations for a key live in one file, instead of a separate .strings file per language.
mac, iphone, ipad, watch and tv variants convert to ICU select syntax on export.
zero, one, two, few, many and other variants convert to ICU plural syntax, edited as one key.
The comment field becomes translator context, and extractionState (manual, extracted_with_value, migrated) is preserved.
End-to-end workflow
Upload your Localizable.xcstrings file, run auto-translation across every language, and download it back into your Xcode project with every translation state intact.
File → New → File → Resource → String Catalog
Name: Localizable
Target: [Your App Target]Localizable to follow Apple's convention, and Xcode adds it to your project.simplelocalize upload \
--apiKey PROJECT_API_KEY \
--uploadFormat localizable-xcstrings \
--uploadPath ./Localizable.xcstringsLocalizable.xcstrings to SimpleLocalize. Comments and extraction state come along automatically, and each key's NSLocalizedString call in your Swift code is what populated the file in the first place.{COUNT, plural, one {%lld item} other {%lld items}}
{DEVICE, select, mac {Suche} other {Finde}}simplelocalize download \
--apiKey PROJECT_API_KEY \
--downloadFormat localizable-xcstrings \
--downloadPath ./Localizable.xcstringsLocalizable.xcstrings back with every language, variant and translation state intact, ready for Xcode's String Catalog editor to pick up.Xcode can convert existing .strings files automatically: select them in the Project Navigator, choose "Migrate to String Catalog," and Xcode creates a new .xcstrings file with your translation keys, comments and language localizations carried over.
.stringsdict plural definitions are converted into the String Catalog's plural variations during the same migration, so nothing needs to be re-entered by hand.
Localizable-Auth.xcstrings
Localizable-Settings.xcstrings
Localizable-Main.xcstrings
simplelocalize upload \
--uploadFormat localizable-xcstrings \
--uploadPath ./Localizable-{ns}.xcstringsFor developers
A .xcstrings file packs device variants, plurals and translation state into one file. SimpleLocalize edits all of it as regular translation keys.
Per-device translations are converted to ICU select syntax on export, so they survive a round trip to other file formats too.
Pluralized strings are converted to ICU plural syntax the same way, editable as one key instead of several loose variants.
Convert native specifiers into a platform-independent format, so the same string exports correctly to Android Strings too.
Split translations across several .xcstrings files with a {ns} placeholder in the upload and download path, and manage each one separately.

Every Apple platform
Supported by Xcode 15+ across every Apple platform and framework.
More conversions
Free online converter, no account required. Upload a .xcstrings file and download it in the format you need.
More on Xcode localization and iOS translation workflows.

Everything developers need to know about .xcstrings string catalogs. Covers JSON schema, extractionState and translationState flags, pluralization, device variants, universal placeholders, Git merge conflict strategies, Xcode 26 AI comments, and SimpleLocalize integration.
Yes. They are converted to ICU select syntax (for example {DEVICE, select, mac {...} other {...}}), so the device-specific meaning survives even when exporting to a different file format.
Substitutions (nested plural placeholders inside a string) are read on import, but editing them directly in the translation editor is not yet supported.
Yes. Enabling UNIVERSAL_PLACEHOLDERS on both Android Strings and .xcstrings lets the same source string export correctly to either platform's native placeholder syntax.
SimpleLocalize uses your project's default language key for the sourceLanguage field. If no default language is set, it falls back to en.
No. Xcode's built-in migration carries over translation keys, values, comments and language localizations, and converts existing .stringsdict plural definitions into the String Catalog's own plural variations.