---
title: "How to translate an Xcode String Catalog with AI"
description: "Add languages to your iOS app by translating Localizable.xcstrings with AI. Plurals and format specifiers are handled. Compare options and follow the steps."
date: 2026-10-04
language: en
canonical: https://ai-glot.com/blog/how-to-translate-xcode-string-catalog-with-ai
source: AI Glot blog
---
**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](/blog/how-to-translate-app-language-files-with-ai).

## What a String Catalog is

String Catalogs arrived with Xcode 15. [Apple's WWDC23 session](https://developer.apple.com/videos/play/wwdc2023/10155/) 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](https://developer.apple.com/videos/play/wwdc2023/10155/), 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](https://developers.deepl.com/docs/best-practices/document-translations) | `.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.** `%@`, `%d` and `%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

*Illustration: The five steps of a String Catalog job. Everything before approval is free, so a plan that misread the catalog costs nothing to correct.*

## 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.

*Illustration: English has two plural forms, Russian four and Arabic six. Each form a language uses is written with its category.*

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](/file-formats/xcstrings-translation) needs no account and takes files up to 2 MB and 5,000 words.

**2. Upload `Localizable.xcstrings`** in [the app](https://app.ai-glot.com/signup). 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.
```

*Illustration: You describe the job in plain English. AI Glot turns it into a plan you can read and correct before anything runs.*

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](/blog/build-translation-glossary-brand).

*Illustration: A glossary settles the terms that must not drift, and applies the same decision to every file.*

**5. Read the plan and choose a quality level.**

*Illustration: Two quality tiers, chosen per file. Lite covers about three times more words for the same credits.*

**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.

*Illustration: One file comes back, in the format it arrived in.*

## One catalog, several languages

*Illustration: One String Catalog gains several languages and comes back as the same single file.*

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

*Illustration: Three ways to translate your String Catalog. They all give you the same filled catalog.*

**From the command line** runs again at every release, when Xcode has added new strings to the catalog:

```bash
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](https://ai-glot.com/docs/mcp/overview). 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](https://ai-glot.com/docs/api/overview).

[Pricing](/pricing) lists what a larger volume costs, and a [free account](https://app.ai-glot.com/signup) 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.*