@nuxtjs/i18n
10.6.0 · 30 Jul 2026MIT410.9k / weekRepositoryHomepagenpmAtom feed
72 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 10.x · latest line
10.6.0
30 Jul 2026Add
experimental.optimizeMessageBundlingoptiondomain: Restrict locales to a subset of
domainsStrip protocol when matching domain to host
This release is mostly about performance, and about making the domain features behave consistently.
Faster builds and faster SSR
Locale messages are no longer bundled into your server build as JavaScript, no longer shipped as client chunks when they are served from the messages endpoint, and no longer copied on every server-rendered request.
Building a Nuxt app with 10 locales of around 2,000 messages each and 10 pages:
10.5.0 10.6.0 build time 9.2s 5.7s 38% faster peak build memory 3.6 GB 2.5 GB 30% less build output added by the module 12.9 MB 3.2 MB 75% smaller SSR throughput 785 req/s 1722 req/s 2.2× higher Median of three runs on an M4 Pro with Nuxt 4.5; throughput over 10 concurrent connections. The same app without the module builds in 3.4s and outputs 3.2 MB.
How much of this you notice depends on how many messages your app loads: a few locales with a few hundred messages each will barely differ, larger message sets gain the most. It covers messages the module can read while building —
.json,.yamland.json5files. Locale files written as.tsor.jsproduce their messages at runtime, so both their build and their SSR cost stay as they were. Apps that previously ran out of memory building large message sets should now complete.This should work without any changes on your side. The new message handling can be turned off with
experimental.optimizeMessageBundling: falseif you run into trouble — and if you do, please let us know so we can sort it out.Domains
differentDomainsandmultiDomainLocalesnow agree on which locale each domain serves, which URL a locale is advertised on, and where a visitor goes when the locale they asked for lives on another domain.hreflangand canonical links name one domain per locale, so every domain in your setup describes the same set of pages instead of each claiming the languages for itself.10.5.0 could also stop serving a locale at its own domain root, redirecting
/to the prefixed path and returning 404 for unprefixed paths. A domain that serves exactly one locale is treated as that locale's default again, sodomainDefaultis not needed for it.Changelog
Features
Add
experimental.optimizeMessageBundlingoptiondomain: Restrict locales to a subset of
domains
Bug Fixes
Strip protocol when matching domain to host
Let vue-router encode
switchLocalePathpathsLoad locale files that use Nuxt app composables in the app
Keep params encoded when resolving a localized route by path
bundler: Only precompile locale files the resource transform can re-emit
domain: Resolve locale availability from host membership
domain: Resolve links for the host default locale under
prefix_and_defaultdomain: Resolve domain config the same way at build time and runtime
domain: Resolve the current origin from the host
domain: Redirect detection to the domain serving the detected locale
domain: Resolve a domain serving a single locale as its default
domain: Serve every locale on a host matching no configured domain
hmr: Use virtual module ids in
import.meta.hot.accept()for vite 8routing: Resolve the unprefixed locale per domain
seo: Emit the same
x-defaulton every domainseo: Warn when a domain setup has no locale to annotate as
x-defaultseo: Resolve alternate and canonical links from one domain per locale
types: Narrow locale head types to support
useHeadSafetypes: Annotate the logger so its declaration stays portable
types: Prevent duplicate tsconfig paths for aliased deps
Performance
Skip client locale chunks when using messages endpoint
Keep locale messages out of server build graphs
Avoid copying locale messages per ssr request
Enable
experimental.optimizeMessageBundlingby defaultKeep message caching enabled for static locales in mixed projects
10.5.0
21 Jul 2026Reading the note…
10.4.1
10 Jul 2026Reading the note…
10.4.0
21 May 2026Reading the note…
10.3.0
24 Apr 2026Reading the note…
10.2.4
23 Mar 2026Reading the note…
10.2.3
6 Feb 2026Reading the note…
10.2.1
17 Nov 2025Reading the note…
10.2.0
2 Nov 2025Reading the note…
10.1.2
26 Oct 2025Reading the note…
10.1.1
14 Oct 2025Reading the note…
10.1.0
9 Sep 2025Reading the note…
10.0.6
19 Aug 2025Reading the note…
10.0.5
12 Aug 2025Reading the note…
10.0.4
8 Aug 2025Reading the note…
10.0.3
24 Jul 2025Reading the note…
10.0.2
22 Jul 2025Reading the note…
10.0.1
20 Jul 2025Reading the note…
10.0.0
17 Jul 2025Reading the note…
- 9.x
9.5.6
25 Jun 2025Reading the note…
9.5.5
30 May 2025Reading the note…
9.5.4
30 Apr 2025Reading the note…
9.5.3
8 Apr 2025Reading the note…
9.5.2
5 Apr 2025Reading the note…
9.5.1
5 Apr 2025Reading the note…
9.5.0
4 Apr 2025Reading the note…
9.4.0
24 Mar 2025Reading the note…
9.3.4
21 Mar 2025Reading the note…
9.3.3
20 Mar 2025Reading the note…
9.3.2
19 Mar 2025Reading the note…
9.3.1
9 Mar 2025Reading the note…
9.3.0
7 Mar 2025Reading the note…
9.2.1
19 Feb 2025Reading the note…
9.2.0
6 Feb 2025Reading the note…
9.1.5
2 Feb 2025Reading the note…
9.1.4
29 Jan 2025Reading the note…
9.1.3
23 Jan 2025Reading the note…
9.1.2
21 Jan 2025Reading the note…
9.1.1
6 Dec 2024Reading the note…
9.1.0
18 Nov 2024Reading the note…
9.0.0
3 Nov 2024Reading the note…
- 8.x
8.5.6
2 Nov 2024Reading the note…
8.5.5
21 Sep 2024Reading the note…
8.5.4
20 Sep 2024Reading the note…
8.5.3
10 Sep 2024Reading the note…
8.5.2
5 Sep 2024Reading the note…
8.5.1
25 Aug 2024Reading the note…
8.5.0
19 Aug 2024Reading the note…
8.4.0
15 Aug 2024Reading the note…
8.3.3
28 Jul 2024Reading the note…