Benchmarking Polyglot's translation quality across 49 languages

4,900 UI translations from our June 2026 pipeline, AI-judged by a three-model panel across nine language families. Methodology, full results, and the languages where we were weakest.

9 min read← All articles

Update, September 2026: these results come from our June 2026 pipeline. We've since changed models; treat them as June's results.

We aim for translations that read like native UI copy, with your interpolation variables intact, in every language you ship. An aim like that deserves numbers. This report documents how we measured it in June 2026 — methodology first, results second, and the parts that didn't go perfectly included, because a benchmark that only reports good news isn't a benchmark.

TL;DR (June 2026 pipeline, AI-judged): 4.96/5 overall quality across 49 languages spanning nine language families, scored by a panel of three frontier-model judges. Variable preservation — do {placeholders} survive translation? — scored 5.0/5 in all 49 languages. The weakest language (Hindi) still scored 4.81; the spread across the entire catalog is 0.19.

What we tested

Polyglot's production translation pipeline as it ran in June 2026: the same prompt structure, the same strict JSON output schema, the same batching. No benchmark-only configuration. (We don't disclose the underlying model — it's one input to a pipeline we tune as a whole.)

The dataset

100 English UI strings across 12 categories, designed to mirror what production codebases actually contain:

  • Simple labels, buttons, and navigation ("Save", "Export as CSV")
  • Form elements and placeholders
  • Error and success messages
  • Interpolated strings — Welcome back, {name}!, Showing {start} to {end} of {total} results
  • Pluralized and count-dependent strings
  • Long-form copy (onboarding, marketing paragraphs)
  • Brand terms and edge cases

The full dataset ships in our open-source repository, along with every June translation, so you can re-judge the outputs behind every number below.

Languages

49 targets chosen to span nine language families — including the scripts and structures where machine translation traditionally degrades (RTL, agglutinative morphology, low-resource South Asian languages):

FamilyLanguages
GermanicAfrikaans, Danish, German, Icelandic, Norwegian Bokmål, Dutch, Swedish
RomanceCatalan, Spanish, French, Italian, Portuguese, Portuguese (Brazil), Romanian
SlavicBulgarian, Czech, Croatian, Polish, Russian, Slovak, Slovenian, Serbian, Ukrainian
Baltic, Finnic & HellenicGreek, Estonian, Finnish, Hungarian, Lithuanian, Latvian
East AsianJapanese, Korean, Chinese (Simplified), Chinese (Traditional)
South AsianBengali, Hindi, Marathi, Tamil, Telugu, Urdu
Middle Eastern (RTL)Arabic, Persian, Hebrew
Southeast AsianIndonesian, Malay, Thai, Tagalog, Vietnamese
Turkic & AfricanTurkish, Swahili

That's 4,900 translations per scoring pass.

How we scored it

Every translation was graded 1–5 on three dimensions:

  • Accuracy — does it convey the correct meaning?
  • Fluency — does it read like native UI copy, not machine output?
  • Variable preservation — are {name}, {{count}}, %s preserved exactly? (A mistranslated placeholder isn't a style problem; it's a runtime crash.)

Scoring was done by LLM judges from different model families than the June engine, to reduce the documented self-preference bias where models rate their relatives' output higher. We used a three-judge panel and scored the full 4,900-translation set with each judge in a separate pass:

  • Primary (published): DeepSeek-V4-Pro
  • Cross-check: Kimi-K2.6
  • Cross-check: GLM-5.2

The primary judge's per-string scores are what we publish. The other two re-scored the entire set from scratch as a cross-check — a result that holds up across three judges is worth more than any one judge's opinion.

Results

Primary judge (DeepSeek-V4-Pro)

Aggregate (June 2026 pipeline, AI-judged): 4.95 accuracy · 4.94 fluency · 5.00 variable preservation → 4.96/5 overall.

What a 4.96 average actually means, in plain percentages across all 4,900 translations: 94.5% received the top score (5/5) on every dimension. 99.1% needed at most minor stylistic polish (nothing below 4 on any dimension). And 100% preserved every interpolation placeholder exactly — the failure mode that turns into a runtime bug, not just an awkward phrase.

LanguageAccuracyFluencyVariablesOverall
Afrikaans4.974.975.004.98
Danish4.814.785.004.86
German4.944.955.004.96
Icelandic4.974.975.004.98
Norwegian Bokmål4.984.995.004.99
Dutch4.984.945.004.97
Swedish4.934.935.004.95
Catalan5.005.005.005.00
Spanish4.974.985.004.98
French4.934.935.004.95
Italian4.944.945.004.96
Portuguese4.994.995.004.99
Portuguese (Brazil)4.984.995.004.99
Romanian4.964.975.004.98
Bulgarian4.834.795.004.87
Czech4.934.815.004.91
Croatian4.974.955.004.97
Polish4.954.905.004.95
Russian4.944.915.004.95
Slovak4.904.895.004.93
Slovenian4.974.965.004.98
Serbian5.004.995.005.00
Ukrainian4.954.955.004.97
Greek4.974.925.004.96
Estonian4.974.975.004.98
Finnish4.834.785.004.87
Hungarian4.964.935.004.96
Lithuanian5.005.005.005.00
Latvian4.954.955.004.97
Japanese4.984.985.004.99
Korean4.984.985.004.99
Chinese (Simplified)5.005.005.005.00
Chinese (Traditional)5.005.005.005.00
Bengali5.004.985.004.99
Hindi4.814.635.004.81
Marathi4.894.885.004.92
Tamil4.984.975.004.98
Telugu4.984.945.004.97
Urdu4.934.905.004.94
Arabic4.984.985.004.99
Persian4.934.915.004.95
Hebrew4.874.875.004.91
Indonesian5.005.005.005.00
Malay4.954.955.004.97
Thai4.994.995.004.99
Tagalog5.004.945.004.98
Vietnamese5.005.005.005.00
Turkish4.974.965.004.98
Swahili4.994.995.004.99

The spread between the best languages (Catalan, Lithuanian, Serbian, Chinese, Indonesian, and Vietnamese at 5.00) and the weakest (Hindi at 4.81) is 0.19 — and even the weakest scored a perfect 5.00 on variable preservation.

Cross-judge agreement

The two cross-check judges — Kimi-K2.6 and GLM-5.2 — re-scored all 4,900 translations from scratch, blind to the primary's marks. They landed at 4.95 overall, within 0.01 of the published primary, and agreed language-by-language to a mean absolute difference of about 0.04. Across all 49 languages, every language scored 4.8 or higher with all three judges. That's agreement between AI judges, not a substitute for human review.

Where we're weakest — and why we're publishing it

Four languages landed below 4.9, and they're in the table above, not hidden: Hindi (4.81), Danish (4.86), Bulgarian (4.87), and Finnish (4.87). The single lowest dimension anywhere is Hindi fluency at 4.63 — the output is accurate and keeps every variable, but reads a notch more stiffly than a native writer would phrase it.

This isn't random. The languages where the three judges diverged most are the same ones at the bottom of the table — lower-resource languages where fluency is harder to nail and harder to grade. These are the languages where native-speaker review matters most, because when a benchmark and a human reviewer disagree, the human gets the final word. A benchmark you can trust is one that shows you its outliers instead of rounding them away.

Statistical notes

  • At n=100 strings per language on a 5-point scale, the 95% confidence interval on each language mean is roughly ±0.1.
  • Published per-string scores are from the primary judge's full pass; the two cross-check judges each ran a separate full pass over the same 4,900 translations.
  • Failed batches are scored against us, never silently dropped.

What we deliberately don't claim

  • No competitor comparisons. We haven't run other services' APIs through this harness, so we make no "better than X" claims here.
  • LLM judges are not native speakers. They correlate well with human judgment on translation rubrics, and using three judges tightens that — but the gold standard remains human review.
  • Today's model. These scores describe the June 2026 pipeline. Production changed models on September 14, 2026, so they don't measure what the product runs today.

Reproducing this

The string dataset, the scoring rubric, the verbatim judge prompts, and every translation with its per-string scores are published at polyglot-i18n/polyglot-bench. We include a small rejudge.py script (standard library only) that re-scores our exact outputs with any OpenAI-compatible judge you choose — try one we didn't use:

export JUDGE_API_KEY=...
python3 rejudge.py results/de.json \
  --model your-favorite-judge \
  --endpoint https://your-provider/v1/chat/completions

It prints your judge's per-dimension means next to ours, with deltas. If you run it and get materially different numbers, we want to hear about it.

Re-judging scores the exact June outputs. The repo can also regenerate translations, but that runs through today's production model, so fresh outputs won't match June's.

A condensed version of these results, with per-language tables, lives at /benchmark.

Start in your terminal

Stop hunting for untranslated strings.

Install the CLI, run a scan, and see exactly what you're missing. Free, no account required.

$curl -fsSL https://getpolyglot.ai/install.sh | bash
Benchmarking Polyglot's translation quality across 49 languages - Polyglot Blog | Polyglot