Managing Strings
Local-first string editing with CSVs, sections, and the text and icu formats.
The local-first model
strings set and strings rm edit the CSV files in your workspace. They never touch the platform unless you pass --push. Work offline, review your changes, then sync everything in one step with push. Add --push to any single edit to sync that one key immediately while editing.
Reading strings
| Command | What it does |
|---|---|
airstrings strings ls | List all strings from the platform (pages automatically) |
airstrings strings ls --locale en --limit 50 | Filter by locale, bound the page size |
airstrings strings ls --key-prefix home. | Filter by key prefix |
airstrings strings ls --local | List local workspace strings (offline, no credentials needed) |
airstrings strings ls --local --section onboarding | List one section, offline |
airstrings strings get welcome.title | Get a single string from the platform |
Writing strings
Set values for multiple locales in one call:
airstrings strings set welcome.title en="Hello" es="Hola" --format text
airstrings strings set onboarding.welcome en="Welcome!" it="Benvenuto!" --format text --section onboarding
airstrings strings set app.tagline en="The best app" --format text --push--formatis required and must betextoricu. There is no default: a missing or invalid format is rejected before anything is written.--sectionplaces the key in a section.
Choosing a format
text: plain text, served exactly as written.icu: ICU MessageFormat with plurals, select, number and date formatting, interpolation.
Braces in
textare served verbatim. Atextvalue containing{…}triggers a non-fatal warning: the braces are not interpolated, and your app will display them literally. Useicuwhen you need interpolation.
Removing strings
airstrings strings rm old.unused.key
airstrings strings rm old.unused.key --push
airstrings strings rm welcome.title --locale es --pushWithout --locale, the whole key is removed. With --locale, only that locale's value is removed.
Sections
Sections group related strings: each section gets its own subdirectory and CSV file, while unsectioned strings live in the root strings.csv.
airstrings sections list
airstrings sections create onboarding --description "Onboarding flow strings"
airstrings sections delete sec_xxxxxLocales
airstrings localesLists the project's locales with string counts per locale.
The CSV format
Workspace CSVs use one row per key + locale pair:
key,locale,value,format- RFC-4180 quoting.
- Deterministically sorted by key, then locale (diffs stay stable).
Edit via commands, not by hand.
strings setandstrings rmwrite atomically, handle RFC-4180 quoting, and validate formats for you. Hand-editing CSVs and bulk pushing skips those checks.