An Xcode String Catalog is one file that holds every language of your app. To add German, Japanese and Portuguese, you fill in that one file, and Xcode takes it from there.
This guide is for Localizable.xcstrings and the one thing that makes it different from a normal translation job: the plurals. For the other app formats, see how to translate your app’s language files.
What a String Catalog is
String Catalogs arrived with Xcode 15. Apple’s WWDC23 session describes them as a way to manage all of your strings in one place. Xcode finds localizable strings after each build and adds them to the catalog, and you add a language with the plus button.
Under the hood it is a JSON file called Localizable.xcstrings by default. Each key holds its translations for every language, plus the comment for translators.
Which option should you use?
| Good for | Where it stops | |
|---|---|---|
| AI Glot | Several languages in one job, plurals done per language, a glossary that must hold | Not needed for ten strings |
| Xcode’s Export Localizations | One localization catalog per language, to send to a translator, then Import Localizations | It prepares the files but does not translate them, so you still need a translator or a tool |
| A translation management platform (Crowdin, Lokalise, Phrase) | A team with reviewers and a repository connection | You set up a project and connect your repository first |
| DeepL | XLIFF files, which are on its list | .xcstrings is not on that list |
| ChatGPT, Claude or another assistant | A handful of strings | A catalog is nested JSON with plural variations, so a long file is slow, uses up your usage limit and risks a broken key or a missing plural form |
| A freelancer or an agency | Your App Store page and onboarding | Slow, priced per word |
Pay a person for the five strings that sell your app. Run the thousands behind them through an engine.
Why AI Glot fits a String Catalog
- It writes into the right key and language. The catalog stays one file.
- Plurals are done per language. Russian needs four forms and Arabic six, and each form is written with its category.
- Format specifiers are kept.
%@,%dand%1$@stay in the translated string. - Comments for translators stay attached to their keys.
- You can fill only the gaps. Reviewed strings come back untouched.
- A plan before any spend.
The path of one file
- 1UploadLocalizable.xcstrings as it isUp to 8 MB
- 2Say what you needLanguages to addFree
- 3Read the planMissing keys per language, costFree
- 4ApproveThe only step that spendsSpends credits
- 5DownloadThe same catalog, filledReplace the file
Why plurals are the point
English has two plural forms. Other languages have more, and a message that says “3 photos” needs the right one in each language.
- one
- other
- one
- few
- many
- other
- zero
- one
- two
- few
- many
- other
A category the source does not have but the target language uses is written, so a Russian catalog gains its few and many forms. Without that, the app shows a wrong form for some counts.
What to check after
Substitutions and device variations. They are not translated yet and are left as they are. The plan tells you how many there are.
Language list. Open the catalog in Xcode and check that each new language is listed and its progress reads as complete.
Length. Run the app in one new language and open the screens with the longest strings, for text that overflows a button.
How to do it, step by step
1. Try a file for free. The String Catalog translator needs no account and takes files up to 2 MB and 5,000 words.
2. Upload Localizable.xcstrings in the app. Find it in your project folder, in the Resources folder if you accepted Apple’s default location.
3. Say what you need in one sentence.
Add German, Japanese and Portuguese.
Translate only the keys that have no translation in each language yet.
The sentence decides what is translated across the whole catalog. A rule about wording, such as “keep every format specifier exactly as written” or “use the informal register”, goes into the second box at approval, because it is applied to each string as it is written.
4. Add a glossary for the app name, feature names and the words your app always says one way. How to build one.
5. Read the plan and choose a quality level.
Lite gives about three times more words per credit and is faster: right for a new locale you will review. Standard is for the strings on your App Store page. One credit is one word in Standard.
6. Approve and download, then replace the catalog in your project.
One catalog, several languages
The numbers are an example. Unlike most formats, a String Catalog holds every language, so you get one file back, not one per language.
Three ways to run it
From the command line runs again at every release, when Xcode has added new strings to the catalog:
id=$(aiglot batches create Localizable.xcstrings \
--instruction "Add German, Japanese and Portuguese. Translate only the keys with no translation yet." \
--json | jq -r '.data.id')
aiglot batches get "$id" --json | jq '.data.plan'
aiglot batches approve "$id" --quality lite \
--instructions "Keep every format specifier exactly as written."
aiglot batches download "$id" --output Localizable.xcstrings
With your AI agent: connect AI Glot as an MCP server. The agent can read your project, propose glossary terms, run the job and put the catalog back where it belongs.
In the app: upload, click, download. Good for a one-off.
For an API integration, see the API documentation.
Pricing lists what a larger volume costs, and a free account comes with credits to run a real file.
The limits quoted here are the ones in force when this was written: 8 MB per String Catalog, and 2 MB and 5,000 words in the free tool. The description of String Catalogs and Export Localizations comes from Apple’s WWDC23 session. DeepL’s list comes from its own documentation. File names and string counts in the diagrams are examples. Your plan shows the real figures for your own file, and it is free to read.
