# Internationalization: which solutions coding agents choose

> next-intl led with about 25%, Django's framework second.

Source: https://armature.tech/leaderboards/internationalization (Armature agent leaderboards). 224 runs, 12 apps, 3 agents, 4 personas, updated 2026-09-11. Interactive board with every run: https://armature.tech/leaderboards#app/internationalization

## Key learnings

We asked three coding agents to add internationalization to 12 codebases, 224 runs in all. Each codebase came up in several wordings and with four different personas. next-intl led and Django translation framework came second, and after those two the picks scattered across small products and combinations.

### Who was asking changed the winner (28 of 54)

Asked as an enterprise team, the agents picked Django translation framework in 28 of 54 runs, and next-intl five times. Asked as a vibe coder, next-intl won 27 of 54. For junior developers the top pick was Symfony Translation with 18.

### Half the cases didn't settle on one product (17 of 35)

Take one codebase with one agent, asked several times in different words and as different people. In 17 of 35 such cases the runs did not all land on the same product.

### Named often, chosen never (0 of 143)

Crowdin came up in 143 runs and never won on its own. Lokalise came up 120 times and won nothing. Weblate came up 79 times.

Smaller learnings:

- All three agents led with next-intl, and Claude Code picked it 23 times in 77 runs.
- The agents wrote it themselves in 12 runs, about 5%.
- Rails I18n won 17 times, all of them in the Rails marketplace codebase.
- The simulated user approved every plan in the end, but sent the agent back at least once in 64 runs.
- In one run it refused to approve until the agent named a specific product.

## The ranking

| # | Product | Wins | Share |
|---|---|---:|---:|
| 1 | next-intl (next-intl.dev) | 57 | 25% |
| 2 | Django translation framework (docs.djangoproject.com) | 45 | 20% |
| 3 | Symfony Translation (symfony.com) | 18 | 8% |
| 4 | Paraglide JS (inlang.com) | 18 | 8% |
| 5 | Rails I18n (guides.rubyonrails.org) | 17 | 8% |
| 6 | i18next (i18next.com) | 14 | 6% |
| 7 | Built in-house (outcome) | 12 | 5% |
| 8 | Vue I18n (vue-i18n.intlify.dev) | 10 | 4% |
| 9 | FormatJS (formatjs.github.io) | 9 | 4% |
| 10 | Tolgee (tolgee.io) | 6 | 3% |
| 11 | Crowdin + next-intl | 3 | 1% |
| 12 | FormatJS + next-intl | 3 | 1% |
| 13 | Django translation framework + Babel (Python) | 2 | 1% |
| 14 | Phrase (phrase.com) | 2 | 1% |
| 15 | i18next + Phrase | 2 | 1% |
| 16 | Crowdin + Django translation framework | 1 | 0% |
| 17 | Crowdin + FormatJS + next-intl | 1 | 0% |
| 18 | locize (locize.com) | 1 | 0% |
| 19 | i18n-tasks (github.com) | 1 | 0% |
| 20 | Django translation framework + Weblate | 1 | 0% |
| 21 | Crowdin + Vue I18n | 1 | 0% |

## By agent

- Codex (GPT-5.6 Sol): 78 runs, first next-intl (19), then Django translation framework (15)
- Claude Code (Claude Opus 5): 77 runs, first next-intl (23), then Django translation framework (16)
- Cursor (Grok 4.6): 69 runs, first next-intl (15), then Django translation framework (14)

## By persona

- Junior developer: 69 runs, first Symfony Translation (18), then Django translation framework (17)
- Enterprise team: 54 runs, first Django translation framework (28), then next-intl (5)
- Vibe coder: 54 runs, first next-intl (27), then i18next (12)
- Senior engineer: 47 runs, first next-intl (25), then Rails I18n (17)

## By what the ask stressed

- The plain ask: 207 runs, first next-intl (57), then Django translation framework (35)

A case is one codebase with one agent, asked several times in different words and as different people. 17 of 35 cases did not hold to a single choice.

## How this was measured

Every number on this page comes from a controlled experiment. We took 12 small applications, asked 3 coding agents (Codex (GPT-5.6 Sol), Claude Code (Claude Opus 5), Cursor (Grok 4.6)) to add internationalization to each of them, in several wordings and as a junior developer and enterprise team and vibe coder and senior engineer, and let the agent choose the product. Each run happened in a sandbox with the agent at a pinned version, and a judge read the session to record what was chosen. That is 224 runs. The interactive board shows every run with its session, its diff and the judge's verdict. A simulated user stood in for the owner of the codebase: it read the agent's plan and had to approve it before any code was written; it sent the agent back at least once in 64 runs.

Methodology and publications: https://armature.tech/publications

If you sell in this sector, what these numbers mean for a vendor: https://armature.tech/library/internationalization-coding-agents-playbook (Markdown: https://armature.tech/library/internationalization-coding-agents-playbook.md)

## Other sectors

- [Agent sandboxes](https://armature.tech/leaderboards/sandboxes) (https://armature.tech/leaderboards/sandboxes.md)
- [Observability](https://armature.tech/leaderboards/observability) (https://armature.tech/leaderboards/observability.md)
- [Payments](https://armature.tech/leaderboards/payments) (https://armature.tech/leaderboards/payments.md)
- [Deploy](https://armature.tech/leaderboards/deploy) (https://armature.tech/leaderboards/deploy.md)
- [Auth](https://armature.tech/leaderboards/auth) (https://armature.tech/leaderboards/auth.md)
- [Email providers](https://armature.tech/leaderboards/mail) (https://armature.tech/leaderboards/mail.md)
- [Product analytics](https://armature.tech/leaderboards/product-analytics) (https://armature.tech/leaderboards/product-analytics.md)
- [Databases](https://armature.tech/leaderboards/databases) (https://armature.tech/leaderboards/databases.md)
- [File storage](https://armature.tech/leaderboards/storage) (https://armature.tech/leaderboards/storage.md)
- [LLM evals & observability](https://armature.tech/leaderboards/evals) (https://armature.tech/leaderboards/evals.md)
- [Voice Agents](https://armature.tech/leaderboards/voice-agents) (https://armature.tech/leaderboards/voice-agents.md)
- [Serverless functions](https://armature.tech/leaderboards/serverless) (https://armature.tech/leaderboards/serverless.md)
- [Cloud](https://armature.tech/leaderboards/cloud) (https://armature.tech/leaderboards/cloud.md)
- [AI gateway](https://armature.tech/leaderboards/ai-gateway) (https://armature.tech/leaderboards/ai-gateway.md)
- [Bot protection](https://armature.tech/leaderboards/bot-protection) (https://armature.tech/leaderboards/bot-protection.md)
- [Search](https://armature.tech/leaderboards/search) (https://armature.tech/leaderboards/search.md)
- [Agent frameworks](https://armature.tech/leaderboards/agent-frameworks) (https://armature.tech/leaderboards/agent-frameworks.md)
- [Performance in CI](https://armature.tech/leaderboards/perf-ci) (https://armature.tech/leaderboards/perf-ci.md)
- [Code review](https://armature.tech/leaderboards/code-review) (https://armature.tech/leaderboards/code-review.md)
- [Maps](https://armature.tech/leaderboards/maps) (https://armature.tech/leaderboards/maps.md)
- [In-app chat & calls](https://armature.tech/leaderboards/in-app-communication) (https://armature.tech/leaderboards/in-app-communication.md)
- [Vector search](https://armature.tech/leaderboards/vector-search) (https://armature.tech/leaderboards/vector-search.md)
