Nuxt I18n Micro

Small, fast i18n for Nuxt. JSON translations loaded per page, localized routes generated at build time, SEO tags without extra code.

One app, three setups

Each one serves as soon as its build ends

Building…

Plain Nuxt

no i18n · build 5.92s

— req/s

p95 11.6 s

@nuxtjs/i18n

v10 · build 6.18s

— req/s

p95 6.1 s

nuxt-i18n-micro

v4 · build 4.74s

— req/s

p95 102 ms

Code bundle, without translations

Plain Nuxt

1.11 MB

@nuxtjs/i18n

1.75 MB

nuxt-i18n-micro

1.29 MB

Artillery, mean of three runs. Packets: count follows req/s, speed follows p95. Benchmark report

Why Nuxt I18n Micro

Only the translations a page needs, routes resolved before the first request, and SEO tags out of the box.
  • One dictionary per page
    A page loads its own JSON plus the shared root keys, fetched on demand and never inlined into the HTML payload.
  • Routes built at build time
    Four prefix strategies, localized paths, redirects and 404s from one route model, with no runtime route matching.
  • SEO without extra code
    Canonical URLs, hreflang alternates, html lang and dir, and og:locale on every localized page.
  • Same core, more frameworks
    Vue, React, Preact, Solid, Astro, Node and VitePress share the translation runtime and file layout.

Up and running in two steps

Install the module, list your locales, and put a JSON file next to each page. Dev mode creates the empty files for you.
pnpm add nuxt-i18n-micro
nuxt.config.ts
export default defineNuxtConfig({
  modules: ['nuxt-i18n-micro'],
  i18n: {
    locales: [
      { code: 'en', iso: 'en-US' },
      { code: 'de', iso: 'de-DE' },
    ],
    defaultLocale: 'en',
  },
})

Not only Nuxt

The Nuxt module and the framework packages read the same JSON files through the same core.