Review a locale’s submissions in minutes, not evenings.
▜ ▜ ▗ polyglots 0.28.0 ▛▌▛▌▐ ▌▌▛▌▐ ▛▌▜▘▛▘ review claude ▙▌▙▌▐▖▙▌▙▌▐▖▙▌▐▖▄▌ setup 4/5 ✓ locale ✓ provider ✓ keys ✓ glossary ✗ rules ▌ ▄▌▄▌ ╭───────────────────────────────────────────────╮ ╭───────────────────────────────────────────────╮ │ [✓] › r Review a submitted .po │ │ a→b t Translate a .po file │ │ Rules plus your review agent │ │ Draft with memory, glossary and MT │ ╰───────────────────────────────────────────────╯ ╰───────────────────────────────────────────────╯ ╭───────────────────────────────────────────────╮ ╭───────────────────────────────────────────────╮ │ ↓wp f Fetch from translate.wordpress.org │ │ ▁▃▅ s Review statistics │ │ Waiting strings, by project │ │ Open the stats page locally │ ╰───────────────────────────────────────────────╯ ╰───────────────────────────────────────────────╯ ╭───────────────────────────────────────────────╮ ╭───────────────────────────────────────────────╮ │ { } o Tools │ │ [≡] c Configuration │ │ Split, import and export TM │ │ Glossary, rules, agents, keys │ ╰───────────────────────────────────────────────╯ ╰───────────────────────────────────────────────╯ ╭───────────────────────────────────────────────╮ ╭───────────────────────────────────────────────╮ │ (?) h Help │ │ (i) a About │ │ Every key, every screen │ │ Version, paths and links │ ╰───────────────────────────────────────────────╯ ╰───────────────────────────────────────────────╯ ←↑↓→ move enter open tab setup p provider ? help ^K go to q quit
polyglots is an app for WordPress locale teams. Pick a contributor’s .po file and it checks every string against your glossary and the translations your team already approved, repairs what it can, and hands you back only the entries that still need you, with a message ready for the contributor.
npm install -g polyglotsnpx polyglotsNeeds Node.js 24 or later. npx runs it without installing.
Then type polyglots and press enter. The app opens in your terminal window, and a setup wizard walks you through the first run.
The app
Arrow keys and enter, and every key on screen
You do not need to know the command line. Run polyglots with nothing after it and you get the screen above: a card for each job, your setup at the top, and the keys for the screen you are on at the bottom. Each screen shown here is the app itself, rendered from its source when this page was built.
Pick a file, not a command
Review and Translate open on a list of the
.pofiles in your folder, newest first, with how many strings each holds. Choose one, check the options, start.Set up once, in five steps
Your locale, which AI agent reviews, drafting keys, the glossary from translate.wordpress.org, and your locale’s rules. Skip any step; the header shows what is left, and the wizard is always under Configuration.
Watch it work, stop when you like
A run shows its progress, the time left and the last entries it decided. p pauses, q stops, and nothing already reviewed is lost: start it again and it carries on.
Help is one key away
? explains the screen you are on, ctrl+k jumps to any other, esc goes back. The full tour
▜ ▜ ▗ polyglots 0.28.0 ▛▌▛▌▐ ▌▌▛▌▐ ▛▌▜▘▛▘ review claude ▙▌▙▌▐▖▙▌▙▌▐▖▙▌▐▖▄▌ setup 1/5 ✗ locale ✓ provider ✗ keys ✗ glossary ✗ rules ▌ ▄▌▄▌ Setup · Step 1 of 5 · Locale (locale needs doing) esc skips a step · the wizard stays under Configuration › Setup wizard The locale you translate into, as translate.wordpress.org names it. Search: nl › nl nl_NL nl-be nl_BE nl/formal nl_NL_formal enter choose and continue esc skip this step ? help
On the command line
The same work as commands, for scripts and automation
Every screen in the app has a command behind it. Use them to run a week’s fetch and review in one line, from a scheduled job, or from an AI agent. Each output below is the CLI’s own, rendered from its source when this page was built.
1 · Fetch
Pull the work from translate.wordpress.org
Name the projects, as slugs or URLs. polyglots finds each one, downloads what is waiting for review or still untranslated, and runs the next step on every file. A project with nothing waiting is skipped, not failed.
polyglots fetch --get waiting …fetch $ polyglots fetch --get waiting --out-dir ~/Downloads/polyglots lunar-forms harbor quiet-gallery ! No locale rules for nl; only the universal checks run. Add some with: polyglots rules edit nl Checking 3 projects on translate.wordpress.org... lunar-forms plugin stable, 286 waiting harbor theme, 41 waiting quiet-gallery nothing waiting Downloading 2 exports to ~/Downloads/polyglots... Started lunar-forms [1/2] lunar-forms: done Started harbor [2/2] harbor: done lunar-forms done 286 reviewed, 22 flagged, 21 repaired, wrote wp-plugins-lunar-forms-stable-nl-repaired.po harbor done 41 reviewed, 0 flagged, 0 repaired quiet-gallery skipped nothing waiting Message for the requester (lunar-forms): I fixed 21 entries, which you can see <a href="https://translate.wordpress.org/projects/wp-plugins/lunar-forms/stable/nl/default/?filters[translated]=yes&filters[status]=current_or_waiting_or_fuzzy_or_untranslated&filters[user_login]=your-wporg-name">here</a>. They included ~10 glossary inconsistencies and ~10 meaning and fluency problems, plus a few smaller ones. ╭─ ✓ Fetched ───╮ │ done 2 │ │ failed 0 │ │ skipped 1 │ ╰───────────────╯
2 · Translate
Draft what nobody has translated
Your translation memory answers first. DeepL, OpenAI or a model on your machine drafts the rest, and an AI agent reviews every draft against the glossary, marking fuzzy the ones a person should check.
translate $ polyglots translate wp-themes-harbor-pt-br.po ! No locale rules for pt-br; only the universal checks run. Add some with: polyglots rules edit pt-br polyglots translate wp-themes-harbor-pt-br.po locale pt-br draft deepl review claude Translating wp-themes-harbor-pt-br.po: 74 of 318 entries selected batch 1/3 drafting… batch 1/3 reviewing… batch 2/3 drafting… batch 2/3 reviewing… batch 3/3 drafting… batch 3/3 reviewing… ╭─ ✓ Done ──────────────────────────────╮ │ translated 62 │ │ from TM 12 │ │ fuzzy 5 check before upload │ │ skipped 0 │ ╰───────────────────────────────────────╯ › Open wp-themes-harbor-pt-br.po in your .po editor to review.
3 · Review
Judge a submission, and fix it
Rules decide the hard failures, the memory settles what it already knows, and the agent judges the rest and writes a fix for what it rejects. Every fix is checked by the rules again before it is kept. You get the flagged entries, repaired, and the reply to post on the PTE request, filled in from your locale’s template.
review $ polyglots review wp-plugins-lunar-forms-stable-de.po ! No locale rules for de; only the universal checks run. Add some with: polyglots rules edit de polyglots review wp-plugins-lunar-forms-stable-de.po locale de review claude Reviewing wp-plugins-lunar-forms-stable-de.po: 286 of 412 entries submitted Settled from memory, not sent to the model: 38 approved, 4 repaired. ╭─ ✓ Reviewed ─────────────────────────╮ │ reviewed 286 126 not submitted │ │ flagged 22 │ │ approvable 264 │ │ repaired 21 2 left for you │ ╰──────────────────────────────────────╯ Message for the requester: I fixed 21 entries, which you can see <a href="https://translate.wordpress.org/projects/wp-plugins/lunar-forms/stable/de/default/?filters[translated]=yes&filters[status]=current_or_waiting_or_fuzzy_or_untranslated&filters[user_login]=your-wporg-name">here</a>. They included ~10 glossary inconsistencies and ~10 meaning and fluency problems, plus a few smaller ones. › Wrote wp-plugins-lunar-forms-stable-de-repaired.po
4 · Stats
See what you reviewed
Every run is recorded on your machine.
polyglots statssummarises it in the terminal and writes a self-contained page you can keep or share: throughput by week, what gets flagged, which projects take the time.stats $ polyglots stats ╭─ • Statistics ────────────────────────────────╮ │ submissions 148 │ │ entries 21,734 │ │ flagged 2,391 11% │ │ weekly ▁▂▂▃▅▃▆▅▄▇▆█ last 12 weeks │ │ translate runs 37 │ │ drafted 4,912 │ ╰───────────────────────────────────────────────╯ Top projects lunar-forms 2,870 entries 12% flagged harbor 1,402 entries 7% flagged quiet-gallery 966 entries 16% flagged 2 unfinished reviews are left out of the totals. › Serving http://127.0.0.1:52817/k3v9q2/ Opened in your browser. Ctrl+C to stop. ✓ Stopped
What it checks
Rules where rules work, judgement where they don’t
The things that break a site
Dropped or invented placeholders, HTML that no longer matches, the wrong number of plural forms, escaped quotes, line breaks, settings the code reads such as ltr. Decided by rules, never by a guess.
Your glossary and your memory
Every string is checked against your locale’s glossary from translate.wordpress.org and the translations your team already approved. A string the memory knows word for word is settled without asking a model.
Your language’s conventions
Title case, apostrophes, ampersands and number formats only matter in some languages, so they run where a locale’s rules turn them on. Turkish ships a maintained pack and Swedish a starting one; any team can write its own, with its common mistakes. Locale rules
An agent for the rest
Meaning, fluency and the soft findings go to an AI agent with the rule hints in hand and three lookups: the glossary, your memory and translate.wordpress.org’s consistency data. Claude gets those and nothing else, no shell and no files; Antigravity is held to them by its own settings. It decides, and repairs what it rejects.
Prefer no AI? Choose No AI in setup: every mechanical check still runs, on your machine, with nothing sent to a model. What the rules catch, and what they cannot
Engines and providers
What runs, and what it costs
polyglots calls no model API of its own for reviews. It drives an agent CLI you already use, under that agent’s account.
| Used for | Option | Cost |
|---|---|---|
| Reviewing | Claude Code (default) | Your Claude plan’s usage, or API billing if the CLI is signed in with a key. |
| Reviewing | Antigravity CLI setup | Your Antigravity account’s usage. |
| Drafting | DeepL (default) | Free within DeepL API Free’s allowance (one-time for new accounts); metered on a paid plan. |
| Drafting | OpenAI | Metered per token. |
| Drafting, experimental reviewing | Local models: Ollama, LM Studio, llama.cpp, vLLM setup | Free; runs on your machine. |
| Rules-only review | No AI, chosen in setup, or review --no-ai what it checks | Free; no model at all. |
Your data
Two files on your machine, and nothing uploaded to GlotPress
The translation memory and glossary live in polyglots.db; run history and caches in jobs.db. Both sit under ~/.local/share/polyglots. polyglots downloads from translate.wordpress.org and never uploads to it: what goes back to GlotPress is your decision, made in GlotPress.
What does leave the machine:
- Reviewing sends each batch of strings, with its glossary terms and memory matches, to the agent you review with and its model provider (Anthropic for Claude, Google for Antigravity).
- Drafting sends source strings to DeepL or OpenAI.
- Lookups query translate.wordpress.org for the glossary, exports and consistency data.
- Usage totals, only if you turn them on: a weekly count of strings reviewed, drafted and repaired, with no names, strings or locale. What is sent
Only with a local model for both drafting and reviewing, or with No AI, do the strings stay on your machine. Claude is held to polyglots’ three lookups on every run and cannot open files or run commands; Antigravity’s limits come from its own settings and any other tool servers registered with it.
- Resumable. Stop a run with q, run it again, and only unfinished entries are sent.
- Cached. Editing three strings and reviewing again sends three.
- Yours. The memory is built from your own imports; back it up, take it with you.
Help translate polyglots
The stats page speaks your language too
The page polyglots stats writes ships in English and Turkish. Its strings are an ordinary gettext template: translate stats.pot in any .po editor and send the .po as a pull request, or attach it to an issue. A locale rules pack for your language is just as welcome.
Install and docs
Start with one file
npm install -g polyglotsnpx polyglotsNeeds Node.js 24 or later. npx runs it without installing.
Roughly, across the installs that share their totals: about 53,000 strings reviewed, 16,000 repaired and 2,300 drafted. How this is counted
Version 0.28.0. Driving polyglots from an agent? Point it at ada.tools/polyglots/ai.