Xcode String Catalog localization with AI
Xcode String Catalogs: every locale, plural variation and comment in one JSON file.
.xcstringsformat: xcstringsevery locale in one file
What it is
String Catalogs (.xcstrings) replaced .strings and .stringsdict in Xcode 15. One file holds the source language, every translation, per-string comments and plural or device variations.
Example
App/Localizable.xcstrings
{ "sourceLanguage": "en", "strings": { "%lld photos": { "comment": "Album subtitle", "localizations": { "en": { "variations": { "plural": { "one": { "stringUnit": { "state": "translated", "value": "%lld photo" } }, "other": { "stringUnit": { "state": "translated", "value": "%lld photos" } } } } } } } }, "version": "1.0"}How Glossa handles it
- Plurals
- Plural variations are read as plural entries and written back as plural variations.
- Comments and context
- The comment field becomes the unit's context; Xcode-extracted comments therefore reach the translator automatically.
- Placeholders
- Format specifiers (%@, %lld, %1$@) are protected and checked on every translation.
- Round trip
- Because one file holds every locale, a single push imports every language. Strings marked shouldTranslate=false, and localizations with device variations or substitutions, are written back untouched while unchanged.
Translate it from the command line
Push the source-language file; strings are deduplicated against the rest of your workspace and queued for translation. Pull writes App/Localizable.xcstrings back in the same format.
npx @meterapp/glossa loginnpx @meterapp/glossa push App/Localizable.xcstrings --project appnpx @meterapp/glossa pull --project app --locale es,de,jaOr ask an agent over MCP: “Push App/Localizable.xcstrings to Glossa and pull Spanish.” It calls push_file and pull_file. See the CLI and MCP guides.
Other formats
Flutter ARBJSON (key/value, i18next)YAML (Rails i18n)Apple .stringsApple .stringsdictAndroid strings.xmlGettext PO/POTXLIFF 1.2 / 2.0Java .properties.NET RESXCSV / TSV (multi-locale)
Moving from Crowdin? Read the comparison.