Command line
A Python package with no dependencies. Without a key it runs as the free demo: 10,000 characters per file, up to 8 languages per run.
Run
pip install kaeris kaeris translate en.json --langs de,ja
Output, shortened
→ no key: free demo limits 10,000 chars per file, 8 languages per run, get a key: kaeris.dev/developer → Translating en.json → de, ja ✓ Wrote 2 file(s) to /home/you/app /home/you/app/de.json /home/you/app/ja.json ✓ Translation QA: no placeholder loss, no overflow risks
Next commands
| Command | What it does |
|---|---|
kaeris init | Writes kaeris.json with your source file, languages and output folder, so kaeris translate runs with no flags. --preset fills it for i18next, react-i18next, next-intl, react-intl, vue-i18n or flutter-arb. |
kaeris translate --only-new | Translates only new and edited keys. kaeris.lock next to the source remembers what is done. JSON and ARB. |
kaeris check | Finds broken translations on your machine, no key. Without Python: npx kaeris check (Node 18+). Details of the check. |
kaeris languages | Prints the 46 language codes. |
kaeris quota | How much of this month's volume is left on your key. |
Flags you will use
| Flag | Meaning |
|---|---|
--langs de,ja | Target languages, comma-separated. Short form -l. |
--out locales | Where to write the files. Default: next to the source. |
--verify | Translates every result back to English and writes verify.json, so you can check the meaning. |
--keep 'KAERIS,GitHub' | Words that stay as written in every language, such as brand names. |
--context 'a bank app' | One line about your app. Helps with words that have two meanings. |
--tone formal | neutral, formal or casual. |
--model openai/gpt-4.1 | Lifetime: the OpenRouter model to translate with. One per language: models in kaeris.json. On other plans the request is refused with the reason. |
--key | Your API key. Or set KAERIS_API_KEY, which is safer: a key typed after --key stays in your shell history and shows in the process list. |
--source-lang en | Language of the source file. Default en; also finds locales/<lang>/<namespace>.json layouts. |
--back-lang en | Language --verify translates back into. Default en. |
--lock PATH | Where kaeris.lock lives. Default: next to the source. |
--assume-current | First --only-new run on a project that is already translated: trust the existing translations instead of translating everything again. |
--tm PATH | Translation memory file, kaeris-tm.json next to the source by default. It reuses translations by text, so a renamed key or a fresh clone does not pay twice. --no-tm turns it off. |
--receipt run.json | Writes a record of the run: model, plan, languages delivered, characters charged and reused. Counts only, no strings. |
Files: .json .yml .yaml .strings .xcstrings .po .arb .xml .csv .xliff .xlf .properties .resx .ftl .md .mdx. An unknown language code is refused before anything is sent: kaeris languages lists the valid ones. Exit codes of translate: 0 done, 1 error, 3 some languages came back untranslated. Full list: kaeris translate --help.
Guides by format: JSON · YAML · PO · XLIFF · ARB · .strings · .xcstrings · Fluent · .properties · .resx · CSV · Markdown · Android XML
CI recipes (in English): GitHub Actions · GitLab CI · pre-commit · Make and npm scripts