# Platform keys: one string, the name each build expects

**Category:** [String Manager](https://help.totalctrl.app/hc/totalctrl/totalctrl-help-center/en-US/categories/strings)
**Updated:** 2026-10-04

## Two kinds of key

Every string has a **String Manager key** — the stable handle it is known by here, shown on the string list and used everywhere in the app. It never changes because a file called it something else.

A **platform key** is what one particular build calls that same string. The same welcome message can be `home_welcome_title` in an Android `strings.xml`, `Home.Welcome` in an iOS `.strings`, and its own English text in a `.po`. Those are three names for one row, not three rows.

## Adding them

Open a string and use **Platform keys**. Seven platforms are offered — iOS, Android, gettext / .po, Web, .NET / .resx, Flutter / ARB and Qt — and you can type a name of your own if your house format is not one of them.

**Every platform key is optional.** A workspace that never adds one keeps downloading exactly what it downloads today. Nothing has to be filled in before anything works.

## Choosing one at download

The choice is made when you download, not stored on the string set — the same strings go to an iOS build and to a translation agency in the same week, and those want different keys off the same rows.

In the download dialog, pick the platform to key the file by. Two things follow:

- **A format that implies a platform picks it for you.** Ask for an Android XML and you get Android keys unless you say otherwise.

- **gettext is different, deliberately.** In a `.po` file the source English text *is* the key — that is what `msgid` means — so a gettext download uses it, as the format defines. A gettext platform key is stored as the `msgctxt` that disambiguates two identical sentences.

## Strings with no key for that platform

Choose what should happen, in the same dialog:

- **Fall back to the String Manager key** (the default). Every string is in the file; the ones with no alias carry their canonical name.

- **Leave them out.** The file contains only strings that have a key for that platform. Use this when a build must not see anything it has not declared.

Either way the count is reported before you download, so "84 of 512 strings have an iOS key" is a thing you read rather than discover afterwards.

---

## Related Articles

- [API, webhooks, and automation](https://help.totalctrl.app/en-US/articles/string-manager-integrations)
- [Download the file you uploaded, with the values changed](https://help.totalctrl.app/en-US/articles/string-manager-template-export)
- [Find: duplicates, old terms, blocked words and tone](https://help.totalctrl.app/en-US/articles/string-manager-find-duplicates)
- [Placeholders, and why they are stored separately](https://help.totalctrl.app/en-US/articles/string-manager-placeholders)
- [Create a string set and add languages](https://help.totalctrl.app/en-US/articles/create-a-string-set)

---
[← Back to TotalCtrl Help Center](https://help.totalctrl.app/en-US/)