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.
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
One column per language
The output has the key column, the source column, then
de,jaand so on. Your key and source column names are kept.Formulas
A cell that starts with
=,+,-or@is written with a leading apostrophe so Excel shows text instead of running a formula.Printf and brace variables
%s,%dand{count}in a cell are compared with the source. In the real run below all three came back.Quoting
Commas and quotes inside a cell are quoted by a CSV writer, so one translated cell cannot spill into the next column.
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.
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 check --source translations.csv --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
What KAERIS does with it
Same columns, more languages
The key and source columns are kept; each target language is a new column. In the terminal the result is written to
translations/localization.csvnext to the source, andkaeris checkreads it from there.Spreadsheet-safe cells
Formula-looking cells are written as text. See the Games page for the game-engine side.
Free check for this format
The free check on /check reads this format and runs without a key or an account. The terminal command
kaeris checkreads it too: it takes all 13 formats since kaeris 0.2.35, with the same rules and nothing sent anywhere.
Run it in three steps
Install the CLI
Run
pip install kaeris.Translate the sheet
Run
kaeris translate localization.csv --langs de,ja,fr.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