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,ja

Or 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

Moving from Crowdin? Read the comparison.

Push your first file

Glossa is free for one app. Sign in, push a translation file, and pull it back in every language.