Translate your app's language files
46 languages, every line checked by translating it back.
Already translated? Find missing keys and broken placeholders, offline:
npx kaeris check --source en.json --langs de,fr
25 of 27 planted meaning errors caught in our public test. How we tested
The same example as in the demo below. See a whole file checked
JSON, .po, XLIFF, .strings and 9 more. Same keys, same order.
Free, in CI or on your machine. No account, nothing sent.
Your OpenRouter key
With Lifetime you pay the model's price, no markup from us.
Looks right, means something else
A second model translates each line back. Here “Bank” became a riverbank.
The meaning changed
With context "fintech" Konto
Ready files and a short list to review
Matching lines are done. Flagged lines are listed first, with the reason.
| Key | English | Deutsch, and back | Check |
|---|---|---|---|
| billing. |
Statement | Aussagetestimony | Meaning changed |
| settings. |
Save changes | Änderungen speichernsave changes | 67% longer, may not fit |
| cart. |
{count} items in your cart | {count} Artikel im Warenkorb{count} items in the cart | Matches |
The de.json you download
{
"billing": { "statement": "Kontoauszug" },
"cart": {
"count": "{count} Artikel im Warenkorb"
},
"greeting": "Willkommen zurück, {name}",
…
}
translations.zip · one file per language
What you can check yourself
25 / 27
planted meaning errors caught in each of two runs of our own test on 30 Oct 2026, on production models; 2.1% of normal lines were flagged. When the witness model is rate-limited, lines are reported as unchecked. Method, sample and limits are published.
kaeris check
finds broken placeholders and missing keys in your own file: free, no account, no key. CLI on npm and PyPI, GitHub Action on the Marketplace.
2026-10-30
Four competitors' plans and prices side by side, with the date checked and a link to each pricing page.
Pricing
Lifetime is one payment, not a subscription.
Free
$0
- 10,000 characters per file (50,000 with a free API key)
- 1.5M characters a month with a free key; 300,000 a day without one
- Up to 8 of the 46 languages per run
- Same GPT-6 Luna as paid plans
Lifetime
$79 once
- 1,000,000 characters per file, no monthly volume limit
- All 46 languages in one run
- Choose the AI model, also per language (--model)
- Your own OpenRouter key: create one free at openrouter.ai. You pay OpenRouter for the model, separately from the $79.
Pro
$19 /month
- 100,000 characters per file
- 12M characters / month≈ 2M words, all target languages combined
- All 46 languages in one run
- Same GPT-6 Luna as paid plans
Team/API
$79 /month
- 1,000,000 characters per file
- 60M characters / month≈ 10M words, all target languages combined
- All 46 languages in one run
- Same GPT-6 Luna as paid plans
All plans · How to cancel · Refund within 14 days if the key is unused
A tool for one file, not a platform for a team
Lokalise and Crowdin are where translators work together. KAERIS translates and checks the file you already have. What that means in practice:
| What | KAERIS | Lokalise, Crowdin |
|---|---|---|
| First translation | KAERISDrop a file. No account. | Lokalise, CrowdinSign up and set up a project first. |
| Price | KAERISFree to try. Lifetime $79 once on your own OpenRouter key, or Pro $19 a month for 12M characters. | Lokalise, CrowdinLokalise starts at $149 a month on annual billing. |
| Checking every line | KAERISA second model translates it back. Variables and tags are counted. | Lokalise, CrowdinQA checks, and review by your translators. |
| Web editor, roles, review workflow | KAERISNo | Lokalise, CrowdinYes |
| Figma and CMS sync | KAERISNo | Lokalise, CrowdinYes |
Lokalise price read on their site on 27 Oct 2026; prices change and theirs is the authority. KAERIS and Lokalise in detail
Works with the file you already have
13 formats. The file comes back in the same format, keys and order.
Also a CLI, an MCP server and a GitHub Action. Docs
Free tools
No account, no AI, same result every run.
Check translations
Empty and missing lines, broken {name} variables, changed numbers, lost tags.
kaeris check --source en.json --langs de,fr
Convert formats
en.json → en.po
Pseudo-localization
[!! Šàvé çħàñĝéš !!]
Questions
What happens to my file?
We translate it and delete it within 2 hours. KAERIS trains no models and runs none: the text goes through OpenRouter to the model provider, under their policy. With Lifetime it goes through your own key. Security details
How good is the back-translation check?
It catches changes of meaning a reader would notice: a lost negation, a wrong number, an opposite action. It is not a human review. Our own test was small and was run with an earlier translation model than today’s; the benchmark page shows the method and its limits. Read the benchmark
Which model translates?
GPT-6 Luna, on the free and paid plans alike. A different model, Gemini 2.5 Flash-Lite, translates each line back, and DeepSeek V3.2 on US hosts (DeepInfra, DigitalOcean, Google) judges whether the meaning changed. No model grades its own work.
Why does Lifetime need my own OpenRouter key?
So you pay for the model at the provider's price, with no monthly fee to us. OpenRouter sells access to many AI models with one key, and you top it up yourself. Get a key