Translate

Translate localization CSV files

A game localization CSV has a key column and one column per language. KAERIS reads the key and the source column and adds a column for every target language.

How a localization CSV is built

The first column is the key, the second the source text; the header names the columns (keys,en). Cells with commas or line breaks are quoted. Rows that are completely empty are ignored.

Source filetranslations.csv
keys,en
GREETING,"Welcome back, %s!"
ITEMS,"You have {count} items, %d of them new"
QUIT,Quit game

What to watch for in CSV translations

A real run: translated to German and checked

A real run, 27 October 2026, nothing edited by hand: kaeris translate translations.csv --langs de with kaeris 0.2.35, 2.5 seconds, model google/gemini-2.5-flash-lite, the free-tier default. Below, the German file it wrote and what kaeris check says about it.

German resulttranslations/translations.csv
keys,en,de
GREETING,"Welcome back, %s!","Willkommen zurück, %s!"
ITEMS,"You have {count} items, %d of them new","Sie haben {count} Artikel, davon %d neu"
QUIT,Quit game,Spiel beenden
kaeris checkexit code 0
$ kaeris check --source translations.csv --langs de
✓ de: complete & placeholder-safe
✓ all locales complete & placeholder-safe

What KAERIS does with it

Run it in three steps

  1. Install the CLI

    Run pip install kaeris.

  2. Translate the sheet

    Run kaeris translate localization.csv --langs de,ja,fr.

  3. Check the result

    Run kaeris check --source localization.csv --langs de,ja,fr, or upload the file on the free check page: both read the column of each language.

pip install kaeris
kaeris translate localization.csv --langs de,ja,fr --verify

Questions

Does it work for Godot and Unity?

The format is key column, source column, language columns, as those engines expect. See the Games page.

Will a cell starting with = run as a formula?

No. Such cells are written so that a spreadsheet shows them as text.

Is it free?

Yes, without an account: 10,000 characters per file and up to 8 languages per run. A free API key raises the file limit to 50,000 characters. Lifetime is $79 once, on your own OpenRouter key; monthly plans start at $19. Pricing

Can I run it from the terminal or in CI?

Yes. pip install kaeris, then kaeris translate localization.csv --langs de,ja. The GitHub Action runs the same translation in a pull request. CLI docs · GitHub Action

Keep going

CLI reference · Check reference · Translate in the browser · Free check · Convert formats · Pseudo-localization

Other formats: JSON · YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · Markdown · Fluent · Android XML