# Keys, placeholders, and plurals

Source: https://rerune.io/docs/translation-keys

Model messages so they remain understandable to translators and compatible with the application that renders them.

## Use stable keys

Source: https://rerune.io/docs/translation-keys#key-design

A translation key is an identifier, not the translated sentence. Prefer a contextual name such as checkout_continue over a vague name such as text_17. Keep the identifier stable when wording changes so your application continues to find the message.

The key editor holds language values, notes and metadata, placeholder information, and variant content. Describe where a short message appears and what the reader is trying to do. Reusing a key only makes sense when its meaning is the same everywhere.

## Keep placeholders compatible

Source: https://rerune.io/docs/translation-keys#placeholders

Placeholders insert values such as a person name, date, or amount into translated text. Keep their names and types aligned with the application. Translate the surrounding sentence and let the target language change word order without renaming the arguments.

The file format determines how arguments are written. Flutter ARB, Android resources, iOS resources, and web engines have different conventions. Select the matching platform during import or export, then validate the result with that platform toolchain.

> **A changed message signature can require a release:** Adding an argument or changing its type can change generated methods or native formatting expectations. Update call sites and generated code before publishing content that depends on the new signature.

## Model quantity-dependent messages

Source: https://rerune.io/docs/translation-keys#plurals

Use plural messages when a number changes the grammar. Languages do not all use the same plural categories. The structured message editor supports plural forms and checks selectors, including duplicate selectors and the required other form.

Test representative values such as zero, one, two, and larger quantities in each language. Keep the quantity variable consistent with the value passed by the application. Do not assemble a translated sentence by concatenating independent words.

Video: [Placeholders and plurals through the SDK](https://www.youtube.com/watch?v=0ES5DIGP2co). Follow a Flutter ARB plural through AI translation, server reconstruction, publication, and rendering. Recorded with Flutter SDK 1.1.0; use the current SDK guide for version-specific behavior.

## Review before publishing

Source: https://rerune.io/docs/translation-keys#review

1. Check the meaning in context, including headings, short labels, and messages with limited space.
2. Verify every placeholder and plural branch against the app format.
3. Check Main and variant values in the intended languages.
4. Run the exported files or SDK-delivered content in the application before a production publication.

- See also: [Translation variants](https://rerune.io/docs/variants)
- See also: [Publishing and OTA delivery](https://rerune.io/docs/publishing)

## Screenshots and the Gallery

Source: https://rerune.io/docs/translation-keys#screenshots

The Gallery tab of a project shows every screenshot once, with the number of keys on it. Search by screenshot name, page, key name or text, and filter by All, Figma or Uploaded. Open a screenshot to see its keys: select a key to highlight its areas, open it in the Keys tab, or show all keys of the screenshot in the key list. The Screens filter in the key list does the same for several screenshots.

Members with the Edit keys permission can upload their own screenshots, for example of a running app, without Figma: choose Upload screenshot in the Gallery, drop or paste an image there, or choose Add screenshot in a key's Design tab. PNG, JPEG and WebP work in every browser, HEIC only where the browser can open it. ReRune removes the image's metadata and makes it smaller when needed, to at most 4096 pixels on the long side and 2 MB. Each screenshot needs a name.

Mark where each key appears by drawing an area on the screenshot. A key can have up to 20 areas, for a label that repeats. Choose from gallery in a key's Design tab adds the key to a screenshot that is already uploaded. Drawing needs a screen at least 768 pixels wide; on a phone you can upload, rename and delete screenshots and remove keys from them.

Replace image swaps the picture and keeps the screenshot, so Screens filters stay as they are. Every key on it comes back as a draft at the same place, scaled to the width of the new image: confirm it, move it, or mark it as not on this screenshot, then save. ReRune then deletes the old image.

Removing a key from an uploaded screenshot can be undone right away. Deleting a key removes it from every screenshot, and areas drawn in ReRune can't be recovered. A screenshot without keys stays in the Gallery until someone deletes it. Deleting a screenshot removes its image from storage; a link to it that was opened before keeps working for at most one hour.

Screenshots from the Figma plugin are managed in Figma: their keys come from linked layers and change with the next push, so ReRune doesn't let you draw on or replace them. Members with the Edit keys permission can delete one in the Gallery. The plugin then uploads it again: with the next push that includes its frame, or with Upload screenshots on its Push screen.

> **Use test data:** Every member of the project's organisation can see its screenshots. Capture screens with test accounts and sample data rather than real customer details.

- [Screenshots from Figma](https://rerune.io/docs/figma#screenshots)
- [Localization screenshots overview](https://rerune.io/localization-screenshots)

---

Part of the ReRune documentation (https://rerune.io/docs). Every chapter with a summary: https://rerune.io/llms.txt. Every chapter in one file: https://rerune.io/llms-full.txt. ReRune is not Rerun (rerun.io), the robotics data visualization tool.
