|\u003Cimg width=\"324\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/cd6f6927-33b3-4b85-a984-64c6cb1f53e5\" />|\n\n#### Proposed Feature: `localeDetector` Option\n\n##### Current Behavior Example\n\nTo illustrate the current behavior, consider the following scenario:\n\n* Accessing `/en/about` and `/ja/about` under the `no_prefix` strategy will not trigger locale detection based on the pathname.\n* As a result, both paths will use the language setting of the build machine during SSG, resulting in both paths potentially being generated in the same language.\n\nScreenshots and repository links demonstrating the current behavior will be provided to further clarify the issue.\n\nTo address this issue, I propose adding a new `localeDetector` option to the module configuration. This option allows specifying the methods for locale detection as follows:\n\n```typescript\ntype LocaleDetector = (\"pathname\" | \"domain\" | \"cookie\" | \"browser\")[];\n\nconst localeDetector: LocaleDetector = [\"pathname\", \"domain\", \"cookie\", \"browser\"];\n```\n\nIf `pathname` is specified, the locale will be automatically detected based on the URL pathname.\n\nThe default value of `localeDetector` will vary depending on the `strategy` value to maintain backward compatibility. For instance, when `no_prefix` is selected, the default value would be:\n\n```javascript\nlocaleDetector: [\"domain\", \"cookie\", \"browser\"]\n```\n\n##### Example Configuration for My Use Case:\n\n```javascript\nstrategy: \"no_prefix\",\nlocaleDetector: [\"pathname\", \"cookie\", \"browser\"]\n```\n\nThis configuration would resolve the issue by enabling locale detection based on pathname while maintaining backward compatibility with existing behavior.\n\nThank you for considering this feature request. I would be happy to provide further clarifications or contribute to the implementation if needed.\n\n\n### Additional information\n\n- [x] Would you be willing to help implement this feature?\n- [ ] Could this feature be implemented as a module?\n\n### Final checks\n\n- [x] Read the [contribution guide](https://nuxt.com/docs/community/contribution) (The contribution guideline of nuxt-modules/i18n is compliant with Nuxt too).\n- [x] Check existing [discussions](https://github.com/nuxt-modules/i18n/discussions) and [issues](https://github.com/nuxt/nuxt/issues).",[3029],{"name":3030,"color":3031},"pending triage","c2e0c6",3609,"Add `localeDetector` option to customize locale detection during Vue component rendering","2025-05-16T18:51:35Z","https://github.com/nuxt-modules/i18n/issues/3609",0.6676493,{"description":3038,"labels":3039,"number":3041,"owner":3019,"repository":3020,"state":3021,"title":3042,"updated_at":3043,"url":3044,"score":3045},"### Environment\n\n- Operating System: `Darwin`\n- Node Version: `v22.14.0`\n- Nuxt Version: `3.17.6`\n- CLI Version: `3.25.1`\n- Nitro Version: `2.11.13`\n- Package Manager: `npm@10.9.2`\n- Builder: `-`\n- User Config: `compatibilityDate`, `devtools`, `modules`, `i18n`\n- Runtime Modules: `@nuxtjs/i18n@9.5.6`\n- Build Modules: `-`\n\n\n### Reproduction\n\n[https://github.com/ap-arto/define-i18n-route-issue](https://github.com/ap-arto/define-i18n-route-issue)\n \n1. Run the development server:`npm run dev`\n2. Visit localhost:3000\n3. Observe that the `spanish___es` route has been created, even though this domain is meant to serve only the `en` locale and the `/spanish` page shouldn't be available.\n\n### Describe the bug\n\nWhen using customRoutes: 'config' with manually specified pages, everything works as expected. However, defineI18nRoute appears to be broken in this edge case.\n\n### Additional context\n\nThis might be related to that issue: https://github.com/nuxt-modules/i18n/issues/3226\n\n### Logs\n\n```shell\n\n```",[3040],{"name":3030,"color":3031},3721,"defineI18nRoute includes routes for other locales when using 'no_prefix' and differentDomains","2025-07-11T09:46:02Z","https://github.com/nuxt-modules/i18n/issues/3721",0.6739553,{"description":3047,"labels":3048,"number":3050,"owner":3019,"repository":3020,"state":3021,"title":3051,"updated_at":3052,"url":3053,"score":3054},"### Environment\n\n- Operating System: Darwin\n- Node Version: v22.15.0\n- Nuxt Version: 3.17.3\n- CLI Version: 3.25.1\n- Nitro Version: 2.11.12\n- Package Manager: npm@10.9.2\n- Builder: -\n- User Config: compatibilityDate, devtools, modules, i18n, nitro\n- Runtime Modules: @nuxt/content@3.5.1, @nuxtjs/i18n@9.5.4\n- Build Modules: -\n\n\n### Reproduction\n\nA minimal reproduction of this issue can be found in the following repository: https://github.com/odan-sandbox/nuxt-content-and-i18n-no_prefix-example\n\n\n### Describe the bug\n\nWhen using the `no_prefix` strategy in `nuxt-i18n`, the locale detection based on the URL pathname is not functioning as expected. This results in incorrect locale assignment during SSR/SSG.\n\nFor example, accessing `/en/about` and `/ja/about` should render the corresponding locale-specific content, but instead, both paths are rendered using the default or server locale, ignoring the locale information in the pathname.\n\nThis issue causes problems for multilingual documentation sites using `nuxt/content`, where the content is structured by locale (e.g., `docs/en/about.md`, `docs/ja/about.md`). During SSG, both paths may be generated with the same language content, leading to incorrect output.\n\nIf a PR to resolve this issue is considered appropriate, I would be willing to work on it.\n\n\n### Additional context\n\nRelated: https://github.com/nuxt-modules/i18n/issues/3609\n\n### Logs\n\n```shell\n\n```",[3049],{"name":3030,"color":3031},3619,"Locale detection not working with `no_prefix` strategy","2025-05-19T06:13:27Z","https://github.com/nuxt-modules/i18n/issues/3619",0.68380636,{"description":3056,"labels":3057,"number":3059,"owner":3019,"repository":3020,"state":3021,"title":3060,"updated_at":3061,"url":3062,"score":3063},"### Describe the feature\n\nI’d like to configure my application so that a locale like pt-BR uses a human‑friendly prefix instead of the code in URLs.\n\nE.g. `/brazil/about` instead of `/pt-BR/about`.\n\nIdeally, something like this:\n\n```js\nlocales: [\n {\n code: 'pt-BR',\n file: 'pt-BR.yml',\n language: 'pt-BR',\n prefix: 'brazil'\n }\n]\n```\n\nThat way:\n\n- I don’t need to map every route manually via pages config or macros.\n- I can keep my existing locale code value (`pt-BR`) unchanged.\n- I can support a custom prefix string (`brazil`) that’s meaningful and SEO‑friendly.\n\n### Additional information\n\n- [ ] Would you be willing to help implement this feature?\n- [ ] Could this feature be implemented as a module?\n\n### Final checks\n\n- [x] Read the [contribution guide](https://nuxt.com/docs/community/contribution) (The contribution guideline of nuxt-modules/i18n is compliant with Nuxt too).\n- [x] Check existing [discussions](https://github.com/nuxt-modules/i18n/discussions) and [issues](https://github.com/nuxt/nuxt/issues).",[3058],{"name":3030,"color":3031},3761,"[Feature Request] Allow custom prefix per locale","2025-07-25T05:47:03Z","https://github.com/nuxt-modules/i18n/issues/3761",0.6955585,{"description":3065,"labels":3066,"number":3079,"owner":3019,"repository":3020,"state":3021,"title":3080,"updated_at":3081,"url":3082,"score":3083},"### Environment\n\n- Operating System: `Darwin`\n- Node Version: `v20.9.0`\n- Nuxt Version: `3.14.159`\n- CLI Version: `3.15.0`\n- Nitro Version: `2.10.4`\n- Package Manager: `pnpm@9.9.0`\n- Builder: `-`\n- User Config: `default`\n- Runtime Modules: `@nuxtjs/i18n@9.0.0`\n- Build Modules: `-`\n\n\n### Reproduction\n\nhttps://stackblitz.com/edit/github-v1acupz3?file=app%2Fpages%2Fabout.vue,nuxt.config.ts\n\n### Describe the bug\n\nWhen a project uses different domains to separate localizations and the routes are translated using `defineI18nRoute()`, the routes from other locales are available in every locale as well.\nFor example, let's say I have route `/about` available on `foo.com` and `/o-nas` on `foo.sk`. When I go to `foo.sk/about`, it will still work.\n```ts\ndefineI18nRoute({\n paths: {\n en: '/about',\n sk: '/o-nas'\n }\n})\n```\n\n\n\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3067,3070,3073,3076],{"name":3068,"color":3069},"bug 🐛","ee0701",{"name":3071,"color":3072},"need reproduction","CD234A",{"name":3074,"color":3075},"scope: language detection","1B89B8",{"name":3077,"color":3078},"scope: routing","21CD73",3226,"Routes from different domains are mixed","2025-06-04T22:01:10Z","https://github.com/nuxt-modules/i18n/issues/3226",0.6970331,{"description":3085,"labels":3086,"number":3090,"owner":3019,"repository":3020,"state":3021,"title":3091,"updated_at":3092,"url":3093,"score":3094},"### Environment\n\n* Nuxt: `^3.x`\n* @nuxtjs/i18n: `^9.x`\n* Package manager: `pnpm`\n* Node: `>=18`\n* OS: macOS\n\n### Reproduction\n\n\n#### 🧩 What I'm trying to do\n\nI want to **dynamically disable translation for some pages**, such as `/admin` or any route matching a certain pattern, by injecting into the `i18n.pages` config like this:\n\n```ts\ni18n: {\n customRoutes: 'config',\n pages: {\n 'admin': false\n }\n}\n```\n\nBut I want to do this **dynamically from another Nuxt module**, based on logic like:\n\n* Whether route path starts with `/admin`\n* Whether the file name includes certain keywords\n* Optional user-defined exclude rule function\n\n---\n\n#### 📌 Problem\n\nThe `pages:extend` hook gives access to all generated Nuxt pages, and I can detect which pages I want to exclude, then inject:\n\n```ts\nnuxt.options.i18n.pages = {\n ...nuxt.options.i18n.pages,\n ...detectedPagesToExclude\n}\n```\n\nHowever, **`@nuxtjs/i18n` appears to snapshot the config too early**, likely before `pages:extend` runs, and generates `i18n-options.mjs` using an internal `ctx.options`, so my dynamic changes to `nuxt.options.i18n.pages` do **not reflect** in the generated options.\n\n---\n\n### Describe the bug\n\n\n#### ❓Question\n\nIs there an **official or recommended way** to dynamically inject/disable page translation settings (`customRoutes: 'config'` + `pages`) at runtime or module time?\n\nMore specifically:\n\n* Can you expose a Nuxt hook like `i18n:extendPagesConfig(pages)` before generating `i18n-options.mjs`?\n* Or is there a safe way to hook into `ctx.options.pages` in a custom module?\n* Or should we write a wrapper module that overrides the `i18n` module setup?\n\n---\n\n#### 🧪 What I tried\n\n```ts\nnuxt.hook('pages:extend', pages => {\n for (const page of pages) {\n if (page.path.startsWith('/admin') && page.name) {\n nuxt.options.i18n.pages[page.name] = false\n }\n }\n})\n```\n\nBut this doesn't reflect in the generated `.nuxt/i18n-options.mjs` file.\n\n---\n\n#### 🙏 Feature request?\n\nCould you consider adding a hook like:\n\n```ts\nnuxt.hook('i18n:extendPagesConfig', (pages: NuxtPage[], currentConfig: Record\u003Cstring, any>) => {\n // modify and return updated pages config\n})\n```\n\nSo that other modules (like `i18n-exclude`) can safely hook in and modify translation strategy for specific routes?\n\n---\n\nLet me know if there's already a supported way to do this.\n\nThanks a lot for the amazing work on `@nuxtjs/i18n` 🙌\n\n\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3087],{"name":3088,"color":3089},"feature request","ffbb00",3716,"Allow modules to modify route localization","2025-07-03T17:06:13Z","https://github.com/nuxt-modules/i18n/issues/3716",0.6987586,{"description":3096,"labels":3097,"number":3107,"owner":3019,"repository":3020,"state":3108,"title":3109,"updated_at":3110,"url":3111,"score":3112},"### Describe the feature\r\n\r\nAs discussed on Discord with @BobbieGoede and @harlan-zw, there is Harlan's amazing [site-config](https://nuxtseo.com/site-config/getting-started/background) project which aims to provide a central method for general site configuration so not every other module has to implement this itself.\r\n\r\n`nuxt-i18n` allows to specify a `baseUrl`, which is exactly such a reimplementation. I propose to support reading the `i18n.baseUrl` from `site.url` when it is available, keeping the fallback to `i18n.baseUrl`.\r\n\r\nOf course `i18n.baseUrl` *could* be marked as deprecated until the final `v8` release if everything works fine outsourcing the `baseUrl` to `nuxt-site-config` to keep a separation of concerns.\r\n\r\n### Additional information\r\n\r\n- [x] Would you be willing to help implement this feature?\r\n- [ ] Could this feature be implemented as a module?\r\n\r\n### Final checks\r\n\r\n- [X] Read the [contribution guide](https://nuxt.com/docs/community/contribution) (The contribution guideline of nuxt-modules/i18n is compliant with Nuxt too).\r\n- [X] Check existing [discussions](https://github.com/nuxt-modules/i18n/discussions) and [issues](https://github.com/nuxt/nuxt/issues).",[3098,3101,3104],{"name":3099,"color":3100},"need discussion","E9EC2E",{"name":3102,"color":3103},"PR Welcome","40922A",{"name":3105,"color":3106},"scope: configuration","b60205",2474,"closed","feat: support `nuxt-site-config`","2025-07-03T13:00:13Z","https://github.com/nuxt-modules/i18n/issues/2474",0.62521666,{"description":3114,"labels":3115,"number":3116,"owner":3019,"repository":3020,"state":3108,"title":3117,"updated_at":3118,"url":3119,"score":3120},"In order for the runtime config merging to work properly, there must be an entry for each locale in `domainLocales`. This can be done in the nuxt.config like so:\n\n\n```ts\ndefineNuxtConfig({\n runtimeConfig: {\n public: i18n: {\n domainLocales: {\n en: { domain: '' },\n de: { domain: '' }\n }\n }\n }\n})\n```\n\nBut to make this easier for users, nuxt-i18n could pre-configure these values based on `locales` module option.",[],3694,"Pre-populate `domainLocales` based on module configuration","2025-06-25T21:20:58Z","https://github.com/nuxt-modules/i18n/issues/3694",0.6462105,{"description":3122,"labels":3123,"number":3125,"owner":3019,"repository":3020,"state":3108,"title":3126,"updated_at":3127,"url":3128,"score":3129},"### Environment\n\n- Operating System: `Darwin`\n- Node Version: `v22.15.1`\n- Nuxt Version: `3.15.4`\n- CLI Version: `3.21.1`\n- Nitro Version: `2.10.4`\n- Package Manager: `pnpm@9.15.0`\n- Builder: `-`\n- User Config: `extends`, `devtools`, `imports`, `site`, `experimental`, `$production`, `srcDir`, `runtimeConfig`, `components`, `eslint`, `modules`, `reka`, `dayjs`, `icon`, `prepare`, `formkit`, `tailwindcss`, `image`, `i18n`, `statamic`, `multiTenancy`, `linkChecker`, `sitemap`, `robots`, `app`, `compatibilityDate`\n- Runtime Modules: `~/modules/nuxt-multi-tenancy`, `@nuxtjs/i18n@9.5.4`, `@nuxt/eslint@0.3.13`, `@formkit/nuxt@1.6.9`, `@vueuse/nuxt@12.5.0`, `dayjs-nuxt@2.1.11`, `nuxt-prepare@2.3.1`, `reka-ui/nuxt@2.2.1`\n- Build Modules: `-`\n\n### Reproduction\n\nCan't\n\n### Describe the bug\n\nI keep getting warnings for missing baseUrl, how can i fix this? everything seems to be working fine, both on local and production.\n\nIf i use differentDomains option, the warning goes away, but i get missing domain for locale errors.\n\n\u003Cimg width=\"954\" height=\"56\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/47081b37-65fa-4da6-ab5f-f7eb2a21addf\" />\n\n### Additional context\n\n```ts\n// nuxt.config.ts\n\nimport { domains } from \"./locale-domains.config\";\n\nexport default defineNuxtConfig({\n // I18N\n i18n: {\n // baseUrl: process.env.NUXT_PUBLIC_I18N_BASE_URL || process.env.NUXT_SITE_URL,\n strategy: \"prefix\",\n multiDomainLocales: true,\n detectBrowserLanguage: false,\n langDir: \"./../src/i18n/locales/\",\n vueI18n: \"./../src/i18n/config\",\n locales: [\n {\n code: \"nl\",\n files: [\"nl-NL.ts\"],\n language: \"nl-NL\",\n domains: [\n ...[domains.nl, domains.be, domains.youkids_nl, domains.youkids_be],\n ] as string[],\n defaultForDomains: [\n ...[domains.nl, domains.be, domains.youkids_nl, domains.youkids_be],\n ] as string[],\n name: \"Nederlands\",\n isCatchallLocale: true,\n },\n {\n code: \"en\",\n file: \"en-GB.ts\",\n language: \"en-GB\",\n domains: [\n ...[domains.uk, domains.nl, domains.youkids_uk, domains.youkids_nl],\n ] as string[],\n defaultForDomains: [\n ...[domains.uk, domains.youkids_uk],\n ] as string[],\n name: \"English\",\n },\n {\n code: \"fr\",\n file: \"fr-FR.ts\",\n language: \"fr-FR\",\n domains: [\n ...[domains.fr, domains.be, domains.youkids_fr, domains.youkids_be],\n ] as string[],\n defaultForDomains: [\n ...[domains.fr, domains.youkids_fr],\n ] as string[],\n name: \"Français\",\n },\n {\n code: \"de\",\n file: \"de-DE.ts\",\n language: \"de-DE\",\n domains: [\n ...[domains.de, domains.youkids_de],\n ] as string[],\n defaultForDomains: [\n ...[domains.de, domains.youkids_de],\n ] as string[],\n name: \"Deutsch\",\n },\n ],\n customRoutes: \"page\",\n },\n});\n```\n\n\n```ts\n// locale-domains.config.ts\nexport const domains: Record\u003Cstring, string | undefined> = {\n nl: process.env.DOMAIN_NL,\n be: process.env.DOMAIN_BE,\n fr: process.env.DOMAIN_FR,\n de: process.env.DOMAIN_DE,\n uk: process.env.DOMAIN_UK,\n youkids_nl: process.env.DOMAIN_YOUKIDS_NL,\n youkids_be: process.env.DOMAIN_YOUKIDS_BE,\n youkids_fr: process.env.DOMAIN_YOUKIDS_FR,\n youkids_de: process.env.DOMAIN_YOUKIDS_DE,\n youkids_en: process.env.DOMAIN_YOUKIDS_EN,\n} as const;\n\nexport const developmentDomains: Record\u003Cstring, string> = {\n nl: \"localhost:3000\",\n be: \"be.localhost:3000\",\n fr: \"fr.localhost:3000\",\n de: \"de.localhost:3000\",\n uk: \"uk.localhost:3000\",\n youkids_nl: \"nl.youkids.localhost:3000\",\n youkids_be: \"be.youkids.localhost:3000\",\n youkids_fr: \"fr.youkids.localhost:3000\",\n youkids_de: \"de.youkids.localhost:3000\",\n youkids_en: \"en.youkids.localhost:3000\",\n} as const;\n\nexport const i18nDomains = [domains.nl, domains.be, domains.fr, domains.de, domains.uk, domains.youkids_nl, domains.youkids_be, domains.youkids_fr, domains.youkids_de, domains.youkids_en] as string[];\nexport const developmentI18nDomains = [developmentDomains.nl, developmentDomains.be, developmentDomains.fr, developmentDomains.de, developmentDomains.uk, developmentDomains.youkids_nl, developmentDomains.youkids_be, developmentDomains.youkids_fr, developmentDomains.youkids_de, developmentDomains.youkids_en] as string[];\n```\n\n### Logs\n\n```shell\nWARN I18n baseUrl is required to generate valid SEO tag links.\n```",[3124],{"name":3030,"color":3031},3727,"Warn: I18n baseUrl is required to generate valid SEO tag links.","2025-07-20T20:16:57Z","https://github.com/nuxt-modules/i18n/issues/3727",0.66319525,["Reactive",3131],{},["Set"],["ShallowReactive",3134],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$f3ktWE3M-H4eNQFRwITFXNJY1Q2HiNImsA6I0C24HN6k":-1},"/nuxt-modules/i18n/3748"]