Jan
@amann
Maintainer of 🌐
Start linting your strings today. 𝚗𝚙𝚖 𝚒 @𝚎𝚕𝚘𝚚𝚗𝚝/𝚌𝚕𝚒 --𝚜𝚊𝚟𝚎-𝚍𝚎𝚟 Add .𝚎𝚕𝚘𝚚𝚗𝚝/𝚌𝚘𝚗𝚏𝚒𝚐.𝚝𝚜 and run: 𝚗𝚙𝚡 𝚎𝚕𝚘𝚚𝚗𝚝 𝚕𝚒𝚗𝚝 Docs → studio.eloqnt.dev/docs
Localization outgrowing your repo? eloqnt/studio is modular—keep it for linting and source review, and swap out the translation layer for your favorite translation management system. Crowdin support is built in, so upgrading is a config file away—unlocking reviews, 3rd party integrations, and more.
The backbone of eloqnt/studio is its AI engine. You can either use a hosted version, or bring your own model—anything supported by the AI SDK. This also includes 3rd-party plugins for using your Claude Code or Codex sub (subject to their latest terms).
And it all lives in your repo. Config, styleguides, messages—versioned and branched with your code. Nothing to sync, nothing drifting apart on a feature branch.
What makes your product or service unique? Terms to keep, tone to hold, a glossary—all placed in simple markdown styleguides. Easy to set up and maintain, and the format your agent already speaks. It's AGENTS.md, but for translations.
After maintaining next-intl for years, I've seen every way translations break. eloqnt/studio matches strings to their references in source code. This not only enables additional quality guardrails—it pulls in all the relevant context your agent has always silently guessed at.
So eloqnt/studio is different. It's not a model, but a pipeline. Every string moves through well-defined steps: ① Static analysis ② Source text review ③ Context enrichment ④ Translate
Today, I'm launching eloqnt/studio. An AI-based toolchain that helps you ship high-quality translations. All from the command line. 𝚎𝚕𝚘𝚚𝚗𝚝 𝚕𝚒𝚗𝚝 𝚎𝚕𝚘𝚚𝚗𝚝 𝚛𝚎𝚟𝚒𝚎𝚠 𝚎𝚕𝚘𝚚𝚗𝚝 𝚝𝚛𝚊𝚗𝚜𝚕𝚊𝚝𝚎 With our hosted model, or bring your own. 🔗↓
What if your linter caught translation bugs the way it catches code bugs? Missing translations. Unused keys. Broken ICU args. The list goes on.
AI will translate your app in seconds. It'll also confidently mistranslate, break a plural, flatten your tone—and you'll ship it, because you can't review what you can't read.
A new Payload CMS template is available for members of 🌐 learn.next-intl.dev — let me know if you find it helpful!
Black-magic Next.js hack of the week 🧙♂️ → When self-hosting, you can pass request headers from a custom server to the rendering process without opting into dynamic rendering.
🌐 next-intl 4.8 is out with ahead-of-time compilation! Flip the 𝚙𝚛𝚎𝚌𝚘𝚖𝚙𝚒𝚕𝚎 flag and drop ~9KB of compressed JS from your bundles.
If you're not using 𝚠𝚘𝚛𝚔𝚋𝚎𝚗𝚌𝚑.𝚎𝚍𝚒𝚝𝚘𝚛.𝚌𝚞𝚜𝚝𝚘𝚖𝙻𝚊𝚋𝚎𝚕𝚜.𝚙𝚊𝚝𝚝𝚎𝚛𝚗𝚜 in your IDE yet, you should turn it on today.
I'm thinking about adding a set of premium templates for members of 🌐 learn.next-intl.dev E.g.: - Auth integrations - E-commerce integrations - CMS integrations - Advanced cases like multi tenancy Anything you found challenging that you think would be useful to include?
Many thanks to everyone who is actively helping with feedback to get this to stability as quick as we can. I'm adding a test for every edge case that we discover to make sure this remains fixed once the root cause has been addressed.
🌐 next-intl 4.5.7 is out with a significant middleware performance improvement for apps that use a large number of locales!
Finally switched 🌐 learn.next-intl.dev from LS over to Polar and couldn't be happier. I thought about migrating to Stripe Managed Payments, but I didn't realize how low-level this is until I had a closer look. Polar feels like exactly the right kind of abstraction.
🌐 next-intl 4.5: useExtracted → For humans & AI → Next.js-first by design → Full Turbopack support → SWC-based parsing
While everyone is arguing about directives, I’ve just used “using” for the first time, and now I feel like a TypeScript god
I didn't exactly have "build rust tooling" on my bingo card for next-intl in 2025, but here we are