how it works · the workflow

Every locale, reviewed and shipped, without babysitting a script.

Drop a folder of catalogs, see what it’ll cost before it runs, watch it work, review only what needs a human, and download translations that drop straight into your repo.

Processing · 8 localeslive
German120/120 entries
French120/120 entries
Arabic77/120 entries
Portuguese (BR)26/120 entries
how it works

A folder of files in. Reviewed catalogs out.

01

Drop a folder

Drag in a folder of .po files. Each target locale is read from the file’s Language: header, you never type locale codes, and the source is skipped automatically.

Drop a locale folder, target read from each Language: header
de/messages.poGerman
fr/messages.poFrench
ar/messages.poArabic
pt-BR/messages.poPortuguese (BR)
+ 4 more · en is the source, skipped automatically
02

See the cost first

Before anything runs, you see entries, words and an estimated cost for the quality you picked. This is the moment that removes the doubt. Approve it, and not a word is charged you didn’t agree to.

cost preview · before you commitwithin balance
entries550
words~7,400
qualityStandard
estimated cost~$2.39
You approve the estimate. Jobs pause rather than overspend.
03

Watch it run

The job streams progress per locale, chunk by chunk, no refreshing, no wondering. Cancel any time; finished locales are ready as they land.

Processing · 8 localeslive
German120/120 entries
French120/120 entries
Arabic77/120 entries
Portuguese (BR)26/120 entries
04

Review the misses

Every entry is checked for placeholder and markup integrity. Anything that fails is flagged, not shipped. You review just those and re-run them in a click. Partial success is normal, not a failure.

549 translated · 1 to reviewpartial success
okWillkommen, %1$s, placeholders intact
review#, el-review, dropped {{code}}
Flagged entries never ship silently, re-run just the misses.
05

Download, repo-shaped

Pull a zip that mirrors your input tree, one valid .po per locale. Unzip over locale/, read the diff, merge. It just drops in.

messages.zip · shaped like your repo
locale/
├─ de/LC_MESSAGES/messages.po      ✓ valid gettext
├─ fr/LC_MESSAGES/messages.po      ✓
├─ ar/LC_MESSAGES/messages.po      ✓ 6 plural forms
└─ pt-BR/LC_MESSAGES/messages.po   ✓
# unzip over locale/ and read the diff

Prefer your editor and terminal? The same loop runs headless with @echo-lingua/i18n-cli and @echo-lingua/sdk, no browser in the way. See the packages →

quality controls

It translates like it knows your product.

Context modes

Tell it whether a string is a UI label, marketing copy or documentation, the tone follows. Set it per job, or override per entry.

Your glossary, kept verbatim

Brand names, product terms and do-not-translate words come through exactly as written, every locale, every time.

Dialects done right

pt-BR and pt-PT come back correctly different, vocabulary and plural rules, instead of one flattened “Portuguese”.

running it as a team?

One balance, departments, and caps you set.

Everyone on your team draws from a single balance you control, with per-department spend caps, per-member attribution, and control over who sees whose jobs.

Give your next locale drop a try.

Drop a folder, read the cost preview, review the result. Your first month’s standing charge is on us.

Start free