nuxt-language-negotiation

Simple language negotiation for Nuxt 3.
21,376 3
Install
npm install nuxt-language-negotiation
Latest Version:2.0.2
Older releases:3
Last Updated:Mar 15, 2026
Links: GitHub  ·  npm
Maintainer: dulnan

Nuxt Language Negotiation

This module provides basic multi-language support for a Nuxt 3 app. It's minimal by design and tries to do one thing only.

Features

  • SSR language negotiation/detection based on path prefix, Accept-Language or custom (e.g. via API).
  • Single source of truth for "current language" state
  • Multi-language routes via languageMapping meta property

What it doesn't do

This module is not a replacement for @nuxtjs/i18n and doesn't aim to be one. The following features are not provided and are left to the user of the module:

  • Translations / localization
  • Meta tags / SEO
  • Multi domain
  • Language switcher
  • Multiple strategies (prefix, domain, default)

Usage

Setup

export default defineNuxtConfig({
  modules: ['nuxt-language-negotiation'],

  languageNegotiation: {
    // Define the available languages.
    availableLanguages: ['en', 'de', 'fr', 'it'],

    // We use two negotiators: Path prefix takes precedence. In cases where no
    // path prefix is available, we fallback to Accept-Language headers.
    negotiators: ['pathPrefix', 'acceptLanguage'],

    // Write debug messages to the console on client and server.
    debug: true,
  },
})

Routing

The module assumes the following:

  • Routes generall have a language prefix
    • e.g. /en/search, /de/suche, etc.
  • Routes use a single param for the language prefix
    • e.g. /:language/product/:id.
  • Routes without a language prefix are required to specify the language via route.meta
    • e.g. /german-landing-page only available in German, so it defines de in route.meta.language.
  • Routes without a language prefix but with a specific path for every language specifiy the mapping via route.meta

This means your pages directory should look like this:

pages/
  search.vue
  products/
    [id].vue
    index.vue
  landing-page.vue
  index.vue

Related Packages

nuxt-i18n-micro

Fast, lightweight i18n for Nuxt with strategy-based routing and minimal overhead...

233,728 251
@nuxtjs/i18n

Internationalization for Nuxt

23,877,608 2,085
@nuxtjs/i18n-edge

Internationalization for Nuxt

121,288 2,085
vue-simple-i18n

Probably the thinnest library to end all Vue i18n library within 1kb

470 33

Version History

Version Released License
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
Pre-releases (2)
Version Released License
2.0.0-alpha.2
2.0.0-alpha.1