Sign in

Jan

@amann.work
230 followers 351 following 289 posts

Author of next-intl.dev, building eloqnt.dev

PostsRepliesMedia
Jan @amann.work · 09/09/2026
Would you like eloqnt/cli to catch hardcoded strings in your components? Does your agent get this wrong sometimes?
100
Jan @amann.work · 01/09/2026
Seems like eloqnt/cli is helpful to you! Anything it could do that it doesn't today?
111
Jan @amann.work · 27/08/2026
next-intl 4.14 is out with 𝚞𝚜𝚎𝙴𝚡𝚝𝚛𝚊𝚌𝚝𝚎𝚍 improvements! → Switch 𝚖𝚜𝚐𝚒𝚍 of .𝚙𝚘 codec to source string → Support 𝙿𝚛𝚘𝚖𝚒𝚜𝚎.𝚊𝚕𝚕 with 𝚐𝚎𝚝𝙴𝚡𝚝𝚛𝚊𝚌𝚝𝚎𝚍 → Update 𝚜𝚠𝚌_𝚌𝚘𝚛𝚎 to 77
120
Jan @amann.work · 17/08/2026
With 𝚗𝚎𝚡𝚝/𝚛𝚘𝚘𝚝-𝚙𝚊𝚛𝚊𝚖𝚜, you can cache more of your app. If you read a locale from 𝚌𝚘𝚘𝚔𝚒𝚎𝚜() or 𝚑𝚎𝚊𝚍𝚎𝚛𝚜(), this is request data. A locale from [𝚕𝚘𝚌𝚊𝚕𝚎] is a cache key. Your routing strategy becomes a caching decision.
120
Jan @amann.work · 12/08/2026
Next.js 16.3 includes better ISR: Pages can now show an instant loading shell on first visit, and then upgrade to a fully prerendered page in the background (cached). This comes in handy for apps with a large number of locales!
183
Jan @amann.work · 06/08/2026
𝚎𝚕𝚘𝚚𝚗𝚝 𝚕𝚒𝚗𝚝 now links to rule details, so agents can get more guidance when fixing issues.
000
Jan @amann.work · 04/08/2026
Next.js 16.3 is out with next/root-params 🥹🥹🥹 I've literally waited years for this! Use it today with next-intl 🔗↓
140
Jan @amann.work · 03/08/2026
With the number of lint rules for eloqnt/cli growing continuously, I've now added dedicated pages for each one. Is this helpful? Anything to add/change?
100
Jan @amann.work · 27/07/2026
eloqnt/studio now has built-in Crowdin synchronization
100
Jan @amann.work · 27/07/2026
MDX components in eloqnt/studio now render twice: → React for humans → Markdown for agents
110
Jan @amann.work · 27/07/2026
TIL in monorepos you can split 𝙲𝙻𝙰𝚄𝙳𝙴.𝚖𝚍 files by package, much tidier 💡 𝚎𝚕𝚘𝚚𝚗𝚝/ ─ 𝙲𝙻𝙰𝚄𝙳𝙴.𝚖𝚍 ─ 𝚊𝚙𝚙𝚜/ ─ 𝚜𝚝𝚞𝚍𝚒𝚘-𝚠𝚎𝚋/𝙲𝙻𝙰𝚄𝙳𝙴.𝚖𝚍 ─ 𝚙𝚊𝚌𝚔𝚊𝚐𝚎𝚜/ ─ 𝚌𝚕𝚒/𝙲𝙻𝙰𝚄𝙳𝙴.𝚖𝚍 ─ 𝚜𝚍𝚔/𝙲𝙻𝙰𝚄𝙳𝙴.𝚖𝚍
110
Jan @amann.work · 24/07/2026
Shipped a much-needed docs revamp for eloqnt/studio. → Zero-to-lint quickstart (with a prompt) → Copyable .𝚖𝚍 links → Support for 𝙰𝚌𝚌𝚎𝚙𝚝: 𝚝𝚎𝚡𝚝/𝚖𝚊𝚛𝚔𝚍𝚘𝚠𝚗 → Split into multiple pages → Public changelogs → It looks just a lot nicer :D
100
Jan @amann.work · 21/07/2026
next-intl@4.13.3 is out with a compatibility fix for the upcoming Next.js 16.3 release! github.com/amannn/next-...
github.com
Release v4.13.3 · amannn/next-intl
4.13.3 (2026-07-21) Bug Fixes Next.js 16.3 compatibility preparation (only update locale cookie for document requests and not prefetches) (#2355) (0555ace) – by @amannn
000
Jan @amann.work · 17/07/2026
When should you translate your app? After every change? Before a commit, after a commit? What about the moment you switch the PR from "draft" to "ready for review"? bsky.app/profile/aman...
110
Jan @amann.work · 16/07/2026
What makes eloqnt/cli somewhat special, is that it understands not only your i18n strings, but also your source code. Helpful for quality checks, but also for updates. bsky.app/profile/aman...
000
Jan @amann.work · 15/07/2026
Have you tried linting your i18n strings yet? > npm install @eloqnt/cli --save-dev
010
Jan @amann.work · 14/07/2026
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. 🔗↓
110
Jan @amann.work · 14/07/2026
Launch day.
010
Jan @amann.work · 09/07/2026
What if your linter caught translation bugs the way it catches code bugs? Missing translations. Unused keys. Broken ICU args. The list goes on.
050
Jan @amann.work · 07/07/2026
Would you merge code nobody reviewed? Then why does everyone ship AI translations nobody reviewed?
bsky.app
Jan (@amann.work)
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. [contains quote post or…
010
Jan @amann.work · 02/07/2026
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.
010
Jan @amann.work · 30/06/2026
How do you keep translations in sync when you're coding with agents?
220
Jan @amann.work · 19/05/2026
A new Payload CMS template is available for members of 🌐 learn.next-intl.dev — let me know if you find it helpful!
010
Jan @amann.work · 15/05/2026
Many thanks to Alexander Tzitamidis (@Dragate) for the donation on GitHub! ❤️ github.com/sponsors/ama...
github.com
Sponsor @amannn on GitHub Sponsors
My passion is to create web-based products where design, usability and performance matter. I’m specialised in developing with React.
000
Jan @amann.work · 13/05/2026
🌐 next-intl 4.12 is out with useExtracted improvements! → Improved monorepo support → Stacked .po descriptions → Path-only references by default → Deferred one-off extraction → Another message ordering fix See the release notes for details: github.com/amannn/next-...
github.com
Release v4.12.0 · amannn/next-intl
4.12.0 (2026-05-13) Features Improvements for useExtracted (#2316) (bff2f96) – by @amannn ⚠️ A small config change is required for useExtracted users to upgrade, please see #2316 for details.
020
Jan @amann.work · 20/04/2026
I've been pretty quiet lately since I've been secretly working on a new project ❤️
My son was born
270
Jan @amann.work · 10/04/2026
📣 PSA: If you're using `localePrefix: as-needed` in your next-intl routing configuration, please be sure to update to next-intl@4.9.1 github.com/amannn/next-...
github.com
Open redirect vulnerability
### Impact Applications using the `next-intl` middleware with `localePrefix: 'as-needed'` could construct URLs where path handling and the WHATWG URL parser resolved a relative redirect target t...
000
Jan @amann.work · 05/02/2026
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.
271
Jan @amann.work · 30/01/2026
next-intl@4.8.1 is out with a minor fix for Windows, please keep the feedback coming!
000
Jan @amann.work · 28/01/2026
🌐 next-intl 4.8 is out with ahead-of-time compilation! Flip the 𝚙𝚛𝚎𝚌𝚘𝚖𝚙𝚒𝚕𝚎 flag and drop ~9KB of compressed JS from your bundles.
281
Jan @amann.work · 26/01/2026
The slimmest next-intl ever is coming to a 𝚗𝚘𝚍𝚎_𝚖𝚘𝚍𝚞𝚕𝚎𝚜 folder near you this week.
120
Jan @amann.work · 22/01/2026
You‘re gonna love the upcoming next-intl release … This was feature was on the roadmap for 3 years!
050
Jan @amann.work · 14/01/2026
Starter templates are here on 🌐 learn.next-intl.dev!
4 templates:
- app-router-auth
- app-router-saas
- app-router-tenants
- app-router-monorepo
110
Jan @amann.work · 07/01/2026
If you're not using 𝚠𝚘𝚛𝚔𝚋𝚎𝚗𝚌𝚑.𝚎𝚍𝚒𝚝𝚘𝚛.𝚌𝚞𝚜𝚝𝚘𝚖𝙻𝚊𝚋𝚎𝚕𝚜.𝚙𝚊𝚝𝚝𝚎𝚛𝚗𝚜 in your IDE yet, you should turn it on today.
120
Jan @amann.work · 19/12/2025
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?
About to create the repo on GitHub …
000
Jan @amann.work · 18/12/2025
If you're looking for an i18n library that causes a "compile time that takes longer that a hair salon appointment", then I've got your back 🤝 github.com/amannn/next-...
github.com
This library is PAINFULLY slow on Nextjs, specially when integrating route based locales. DO NOT USE THIS LIBRARY IF YOU'RE NEW TO INTERNATIONALIZATION... · amannn next-intl · Discussion #2190
I'm sorry but i have to be this guy, if you're new to translations, internationalization, this library is not for you, even if it seems easy to set up, bugs, cache issues, rtl issues, and other stu...
110
Jan @amann.work · 17/12/2025
Contextual, localized error handling in Server Actions with Zod 4 — the easy way.
Code snippet that demonstrates how to use an error map in Zod 4 for computing errors.
120
Jan @amann.work · 16/12/2025
Another week, and another release of next-intl is out with fixes for useExtracted. In case you're already using this feature, it's recommended to upgrade! github.com/amannn/next-...
github.com
Release v4.6.1 · amannn/next-intl
4.6.1 (2025-12-16) Bug Fixes Improvements for useExtracted (#2176) (3937e44) – by @amannn
120
Jan @amann.work · 12/12/2025
🌐 next-intl@4.6 is out! You can now define custom codecs for useExtracted if you have more specific needs than what ships out of the box. This release also includes further fixes for message extraction, so definitely upgrade if you're already adopting this!
130
Jan @amann.work · 05/12/2025
💡 Factory functions are the cheat code for ergonomic TypeScript APIs
1110
Jan @amann.work · 03/12/2025
🌐 next-intl 4.5.8 is out! Improvements for useExtracted: → Handle multiple calls to useTranslations and useExtracted → Avoid conflict with existing useTranslations import → Append newline with .json formatter
241
Jan @amann.work · 02/12/2025
All I want for Christmas is a stable release of next/root-params for @nextjs.org … 🎄🎁
220
Jan @amann.work · 01/12/2025
🌐 next-intl 4.5.7 is out with a significant middleware performance improvement for apps that use a large number of locales!
Benchmark results
180
Jan @amann.work · 01/12/2025
⏳ Last chance today! It’s also a great way to support the development of next-intl! ❤️ And I guarantee you’ll learn something new. If not, you get a full refund—no questions asked.
000
Jan @amann.work · 27/11/2025
🌐 next-intl@4.5.6 is out! Improvements for useExtracted: → Fixes message reset race condition → Stable, environment-agnostic key sorting → Preserves 3rd-party .po flags → Handle encoding in .po files → Updates po-parser to v1 github.com/amannn/next-...
github.com
Release v4.5.6 · amannn/next-intl
4.5.6 (2025-11-27) Bug fixes for useExtracted Handle race condition when detecting locale changes which could lead to reset of messages with useExtracted (#2131 – by @amannn) Don't depend on envir...
130
Reposted by Jan
Remco Haszing @remcohaszing.nl · 26/11/2025
Before: - Think of a message ID (This is often hard!) - Define your message text - reference the message ID After: - Tag your string as translatable
121
Jan @amann.work · 25/11/2025
The Black Friday discount is live — 40% off! Updated for Next.js 16, lifetime updates included, lowest price it’ll ever be.
000
Jan @amann.work · 20/11/2025
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.
The first order processed with the new Polar setup.
010
Jan @amann.work · 19/11/2025
🌐 next-intl@4.5.4 is out, where Donny, the creator of SWC, rewrote the AST transformer for useExtracted in Rust! 🏆 ~45% faster processing time ✅ Support for source maps github.com/amannn/next-...
github.com
Release v4.5.4 · amannn/next-intl
4.5.4 (2025-11-19) Bug Fixes Move AST transformer of useExtracted to SWC plugin & handle source maps (#2114) (e63fbc5) – by @kdy1 & @amannn
070
Jan @amann.work · 14/11/2025
I've just open-sourced the .po parser I've implemented for this feature. Might be useful in case you want to build custom tooling around! It might also come in handy if you want to implement a custom .po formatter for useExtracted in the future. github.com/amannn/po-pa...
github.com
GitHub - amannn/po-parser: Parses and serializes `.po` file content.
Parses and serializes `.po` file content. Contribute to amannn/po-parser development by creating an account on GitHub.
061