AI-powered translations you can actually ship

Use source code analysis, context enrichment, styleguides and integrated checks to translate your app—so quality holds up in languages you don’t speak. All from the command line.

Get startedMade for next-intl

By Jan Amann

Author of next-intl

~/Projects/eloqnt/apps/cli-web
▋

Improving translation quality across the web

  • Bluesky
  • Daybridge
  • Jitsi
  • Node.js
  • Twenty
  • Umami
  • Zoonk

Static analysis

Catch translation errors early, with eloqnt lint

A broken translation often surfaces only when a user reports it. By analyzing your source code and messages at the AST level, a mismatch breaks the build instead of the page.

Lint your project

src/components/DashboardHeader.tsx

import {useExtracted} from 'next-intl';
export default function DashboardHeader({user}) {
const t = useExtracted();
return (
<h1>
{t('Welcome back, {name}', user)}
Every translation now needs this argument
</h1>
);
}
eloqnt lint
messages/es.json
│
│ "kFvGpR": "Bienvenido de nuevo"
│ ─┬───────────────────
│ ╰─ Missing ICU argument: {name} (inconsistent-args)
✗ 1 error
→ Rule details: https://cli.eloqnt.dev/docs/lint-rules/<rule>

Source text review

Fix it before it fans out, with eloqnt review

If a term is off in your primary language, it will be off in all your translations too. Source copy is reviewed for spelling, grammar, and styleguide adherence, so errors can be fixed at the source.

Review your messages

src/components/InviteDialog.tsx

import {useExtracted} from 'next-intl';
export default function InviteDialog() {
const t = useExtracted();
return (
<Dialog>
<h2>{t('Invite to your team space')}</h2>
Your styleguide calls this a “workspace”
<Button>{t('Send invites')}</Button>
</Dialog>
);
}
eloqnt review
✔ Context enrichment complete
✔ Styleguide loaded (global)
✔ Reviewed source strings via eloqnt/engine (hosted)
✔ Post-review checks done
messages/en.json (source locale)
│
│ - "Kcbtmx": "Invite to your team space"
│ + "p4XQ2p": "Invite to your workspace" (src/…/InviteDialog.tsx)
│ ─┬────────────────────────────────────
│ ╰─ Your styleguide calls this a "workspace"
messages/
en.json 24 reviewed, 1 fixed
→ Run `eloqnt translate` to translate

Contextual translations

Translate the meaning, not the word, with eloqnt translate

A word alone is ambiguous. Each string is enriched with how its call site uses it, translated according to your styleguides, and then checked for accuracy and consistency before it lands.

Translate your app

src/app/products/[slug]/page.tsx

import {useExtracted} from 'next-intl';
export default function ProductDetailPage {
const t = useExtracted();
return (
<form action={checkout}>
<button type="submit">{t('Order')}</button>
“Order” is a purchase, not a sort direction
</form>
);
}
eloqnt translate
✔ Context enrichment complete
✔ Styleguides loaded (global, de, es)
✔ Translated de, es via eloqnt/engine (hosted)
✔ Post-translation checks done
messages/
de.json 1 translated
es.json 1 translated
✔ Project fully translated

Localization outgrowing your repo? Crowdin adds reviews, integrations, collaboration, and more—your strings and context carry right over.

Sync with Crowdin

Local first

Hackable, because it’s just files

Config, styleguides and messages live right next to the code they belong to. That gives you versioning, reviews and ownership, and your coding agent can read and edit them like any other file.

Add a styleguide

.eloqnt/styleguide.md

# Styleguide
## Voice and tone
- Friendly and concise.
- Address the user as "you".
## Glossary
- "workspace": where a team keeps its projects
Plain markdown, right in your codebase
- "API key": the token that authenticates a project
tree .eloqnt messages
.eloqnt
├── config.ts
├── styleguide.md
└── styleguide.es.md
messages
├── de.json
├── en.json
└── es.json
2 directories, 6 files

Your data is yours. Since all files sit right in your repo, our backend is stateless and keeps nothing between runs. If you bring your own model, no message or line of code reaches us at all.

“Agents are only as good as the proof-checkers, compilers, type systems, and linters you give them.”
Guillermo Rauch@rauchg

Would you merge unreviewed code? When you tell your agent to “just translate”, it does what it’s told. Whether it has enough context, or not.

But quality needs a gate. And with a guarantee on full context, eloqnt/cli helps to translate with confidence—instead of guesses. For you, and your agent.

feat: Greet the user by namea41c9e2

i18n / lint (pull_request) In progress

messages/es.json

{
"kFvGpR": "Bienvenido de nuevo, {nombre}",

Check failure on messages/es.json

Inconsistent ICU arguments: missing {name} from source, unknown {nombre}

"9pQm1e": "Enviar invitaciones"
}

Agent is fixing the failing check

  1. Thought for 2s

  2. Read the inconsistent-args docs

    cli.eloqnt.dev/docs/lint-rules/inconsistent-args.md

    The Spanish translation accidentally renamed {name} to {nombre}.

  3. Retranslated kFvGpR

    npx eloqnt translate --id kFvGpR --locale es

  4. No issues found

    npx eloqnt lint

  5. Pushed 1 commit

    git commit -am "fix: Retranslate kFvGpR" && git push

fix: Retranslate kFvGpR8a1d4b7

- "kFvGpR": "Bienvenido de nuevo, {nombre}",

+ "kFvGpR": "Bienvenido de nuevo, {name}",

i18n / lint (pull_request) In progress

Pricing

Translations that hold up—in languages you don’t speak

Lint for free. Translate with our hosted model or bring your own. You can switch between plans or cancel anytime.

Non-AI features

Use AST-level linting to catch broken translations before they ship.

Freeforever

  • Check for errors like missing or undefined messages, inconsistent ICU arguments & more
  • Fully local, no account needed
  • Built-in Crowdin sync
npm i @eloqnt/cli --save-dev

Read the quickstart guide.

Hosted model

Use an eval-proven model provided by us and get started immediately.

$15per month

  • Source reviews & context enrichment for translation quality you can ship
  • Styleguides for authentic voice, vocabulary & tonality
  • Included monthly AI usage for ongoing project work
  • Unlimited languages and projects
Start 7-day free trial

Nothing is charged until the trial ends, cancel anytime.

Bring your own model

Run the translation pipeline locally, with your own model. Buy once, use forever.

$149one-time

  • All features of the hosted version
  • Bring your favorite model—anything the AI SDK supports (incl. 3rd-party providers for Claude Code & Codex)
  • All future eloqnt/engine pipeline & prompt updates included
  • Full control over inference
Buy now ($149)

7-day money-back guarantee

“I’ve been using eloqnt/cli for a while now, and it’s been a game changer for i18n. The translation quality is noticeably better than using Codex or Claude Code directly. It handles context more accurately, and being able to define styleguides as markdown files (similar to skills) is extremely useful.”
Will Ceolin

Will Ceolin

Founder of Zoonk

Ship your next language today

Every translation starts from your code, follows your styleguide and passes your checks.

eloqnt login