\n\n### Describe the bug\n\nWith the default settings and `experimental.typedPages: true` the generated types are not correctly picked up.\n\nIf I rename `RouteNamedMapI18n` to `RouteNamedMap` the types are available.\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3219],{"name":3173,"color":3174},3771,"useRoute needs suffix to work","2025-08-05T16:28:06Z","https://github.com/nuxt-modules/i18n/issues/3771",0.6679219,{"description":3226,"labels":3227,"number":3229,"owner":3179,"repository":3180,"state":3181,"title":3230,"updated_at":3231,"url":3232,"score":3233},"### Environment\n\n------------------------------\n- Operating System: Linux\n- Node Version: v24.2.0\n- Nuxt Version: 4.1.2\n- CLI Version: 3.28.0\n- Nitro Version: 2.12.6\n- Package Manager: npm@11.3.0\n- Builder: -\n- User Config: compatibilityDate, devtools, modules, ssr, nitro, scripts, i18n, app, css, ui, tailwindcss, image, fonts, runtimeConfig, ogImage, experimental, router, vite, site, sitemap, robots\n- Runtime Modules: @nuxt/eslint@1.4.1, @nuxt/fonts@0.11.4, @nuxt/icon@1.14.0, @nuxt/image@1.10.0, @nuxt/scripts@0.11.10, @nuxtjs/tailwindcss@7.0.0-beta.0, @nuxt/ui@3.1.3, @nuxtjs/seo@3.0.3, @nuxtjs/i18n@9.5.5, @nuxtjs/sitemap@7.4.3, @nuxtjs/robots@5.5.0\n- Build Modules: -\n------------------------------\n\n### Reproduction\n\n1) Create a mininmal site with i18n\n2) Use \"prefix\" strategy\n3) Create index page with different languages\n\n### Describe the bug\n\nIf you go to route like \nhttp://localhost:3000/en it works just fine\nbut if you try to add leading slash like \nhttp://localhost:3000/en/\nYou will see 404 error\n\nOn real production site problem persists:\nhttps://eilattickets.com/en - works normally\nhttps://eilattickets.com/en/ - 404\n\nEven worse, This problem prevents you from using prerendered site. For some reason prerendered page being always redirected to url with leading slash, making index page with langage prefix not accessible at all.\n\nAny subroutes after prefix works exactly as they must.\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3228],{"name":3173,"color":3174},3833,"Leading slash brokes the index page.","2025-09-30T06:22:20Z","https://github.com/nuxt-modules/i18n/issues/3833",0.67288375,{"description":3235,"labels":3236,"number":3238,"owner":3179,"repository":3180,"state":3181,"title":3239,"updated_at":3240,"url":3241,"score":3242},"### 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```",[3237],{"name":3173,"color":3174},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.68025213,{"description":3244,"labels":3245,"number":3248,"owner":3179,"repository":3180,"state":3249,"title":3250,"updated_at":3251,"url":3252,"score":3253},"### Environment\n\n``` \n- Operating System: Darwin\n- Node Version: v22.16.0\n- Nuxt Version: 4.0.3\n- CLI Version: 3.28.0\n- Nitro Version: 2.12.4\n- Package Manager: npm@10.9.2\n- Builder: -\n- User Config: compatibilityDate, devtools, modules, css, vite, routeRules, i18n, sanctum, runtimeConfig, uiPro\n- Runtime Modules: @nuxt/eslint@1.8.0, @nuxt/image@1.11.0, @nuxt/scripts@0.11.10, @nuxt/ui-pro@3.3.2, @nuxtjs/i18n@10.0.5, nuxt-auth-sanctum@1.1.2, dayjs-nuxt@2.1.11\n- Build Modules: -\n```\n\n### Reproduction\n\n1. Create translation files in the default location:\n```\ni18n/locales/es.ts\ni18n/locales/en.ts\n```\n\n2. Configure nuxt.config.ts:\n```ts\nrouteRules: {\n \"/\": { prerender: true },\n \"/en\": { prerender: true },\n...\n// We have prerender y routes, because are landings and astatic\n},\n i18n: {\n defaultLocale: \"es\",\n strategy: \"prefix_except_default\",\n baseUrl: process.env.NUXT_PUBLIC_FRONTEND_URL,\n locales: [\n { code: \"en\", name: \"English\", file: \"en.ts\", language: \"en\" },\n { code: \"es\", name: \"Español\", file: \"es.ts\", language: \"es\" },\n ],\n}\n```\n\n3. layouts/default.vue\n```vue\n\u003Cscript lang=\"ts\" setup>\nconst i18nHead = useLocaleHead({\n dir: true,\n seo: true,\n});\nconst { t } = useI18n();\nconst route = useRoute();\nconst config = useRuntimeConfig();\nconst { locale } = useI18n();\nconst title = computed(() =>\n t((route.meta.title as string) ?? \"layout.default.title\", {\n appName: config.public.appName,\n })\n);\ntype Meta = {\n property?: string;\n content: string;\n name?: string;\n};\nconst metaTags = computed\u003CMeta[]>(() => {\n const description = t(\n (route.meta.description as string) ?? \"layout.default.description\"\n );\n\n return [\n ...(i18nHead.value.meta || []),\n {\n name: \"description\",\n content: description,\n },\n {\n property: \"og:title\",\n content: title.value,\n },\n {\n property: \"og:description\",\n content: description,\n },\n {\n property: \"og:image\",\n content: `/media/common/${locale.value}/og.webp`,\n },\n {\n property: \"og:url\",\n content: `${config.public.frontendUrl}${route.fullPath}`,\n },\n {\n property: \"og:locale\",\n content: i18nHead.value.htmlAttrs.lang,\n },\n {\n property: \"og:site_name\",\n content: config.public.appName as string,\n },\n {\n property: \"og:type\",\n content: \"website\",\n },\n {\n name: \"twitter:card\",\n content: \"summary_large_image\",\n },\n {\n name: \"twitter:title\",\n content: title.value,\n },\n {\n name: \"twitter:description\",\n content: description,\n },\n {\n name: \"twitter:image\",\n content: `/media/common/${locale.value}/og.webp`,\n },\n {\n name: \"robots\",\n // Only if we are in production\n content:\n config.public.vercelEnv == \"production\"\n ? \"index, follow\"\n : \"noindex, nofollow\",\n },\n ] as Meta[];\n});\n\nconst links = computed(() => [\n ...(i18nHead.value.link || []),\n { rel: \"icon\", type: \"image/x-icon\", href: \"/favicon.ico\" },\n]);\n\u003C/script>\n\n\u003Ctemplate>\n \u003CHtml :lang=\"i18nHead.htmlAttrs.lang\" :dir=\"i18nHead.htmlAttrs.dir\">\n \u003CHead>\n \u003CTitle>{{ title }}\u003C/Title>\n \u003Ctemplate v-for=\"link in links\" :key=\"link.id\">\n \u003CLink\n :id=\"link.id\"\n :rel=\"link.rel\"\n :href=\"link.href\"\n :hreflang=\"link.hreflang\"\n />\n \u003C/template>\n \u003Ctemplate v-for=\"meta in metaTags\" :key=\"meta.id\">\n \u003CMeta\n :property=\"meta.property\"\n :content=\"meta.content\"\n :name=\"meta.name\"\n />\n \u003C/template>\n \u003C/Head>\n \u003CBody>\n \u003CAppHeader />\n \u003Cslot />\n \u003CAppFooter />\n \u003C/Body>\n \u003C/Html>\n\u003C/template>\n\n\u003Cstyle>\u003C/style>\n```\n\n4. Some page\n```vue\ndefinePageMeta({\n layout: \"default\",\n title: \"essay.meta.title\",\n description: \"essay.meta.description\",\n});\n```\n\n5. Example of translation file:\n```\nexport default {\n appHeader: {\n tools: \"Herramientas\",\n summary: {\n title: \"Resumidor\",\n description: \"Resume textos de forma automática.\",\n },\n....\n```\n\n\n\n### Describe the bug\n\nWhen using the current Nuxt i18n setup (translations inside i18n/locales/es.ts, i18n/locales/en.ts, etc.), translation keys appear in the \u003Chead> instead of resolved translations.\n\nFor example, Google is indexing essay.meta.title instead of the translated string because the SSR HTML is rendered before locale messages are available. The client later fetches /_i18n/es/messages.json, but if that request fails or is delayed, the \u003Ctitle> and \u003Cmeta> remain as raw keys. This is problematic for SEO since crawlers usually index the raw SSR HTML.\n\nWhen inspect with search console:\n\u003Cimg width=\"399\" height=\"76\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/9b9fcc11-0244-4eab-a624-1e60ac29d6e3\" />\n\u003Cimg width=\"400\" height=\"223\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/3f70c9a6-ec7e-4a20-9ec1-16dc62958297\" />\nIn google SERP\n\u003Cimg width=\"705\" height=\"151\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/ea3e3b89-9bcf-421d-96cc-5987aff8a64c\" />\n\n### Additional context\n\n#### Documentation issues\n\nIn older versions there was a lazy: true/false option. This no longer exists, but the migration path is unclear.\n\nIt’s not documented whether .ts files (with export default {}) behave the same as .json for SSR vs client-only loading.\n\nThe docs show how to use file/files, but don’t explain how to guarantee SSR has messages ready for SEO-critical content like \u003Chead>.\n\nRight now it’s unclear if the messages are truly lazy-loaded, or if something else prevents them from being available at SSR.\n\n### Logs\n\n```shell\n\n```",[3246,3247],{"name":3173,"color":3174},{"name":3176,"color":3177},3794,"closed","SEO issue with SSR translations and unclear lazy-loading behavior","2025-10-07T14:52:13Z","https://github.com/nuxt-modules/i18n/issues/3794",0.6397457,{"description":3255,"labels":3256,"number":3258,"owner":3179,"repository":3180,"state":3249,"title":3259,"updated_at":3260,"url":3261,"score":3262},"### Environment\n\n------------------------------\r\n- Operating System: Linux\r\n- Node Version: v20.14.0\r\n- Nuxt Version: 3.12.4\r\n- CLI Version: 3.12.0\r\n- Nitro Version: 2.9.7\r\n- Package Manager: yarn@1.22.22\r\n- Builder: -\r\n- User Config: ssr, compatibilityDate, devtools, modules, components, runtimeConfig, site, ogImage, i18n, tailwindcss, sitemap, content, gtag, cookieControl\r\n- Runtime Modules: @nuxtjs/i18n@8.3.3, @nuxtjs/tailwindcss@6.12.1, @nuxtjs/seo@2.0.0-rc.16, @nuxt/content@2.13.2, @nuxthq/studio@2.0.3, nuxt-gtag@2.1.0, @dargmuesli/nuxt-cookie-control@8.4.7\r\n- Build Modules: -\r\n------------------------------\n\n### Reproduction\n\nwww.vinoteqa.com/blog\n\n### Describe the bug\n\nWhen I try to visit a page, other than the root, I get redirected to the localized url but still get a error. As soon as I reload the page, it is displayed correctly. \r\n\r\nTry it at: www.vinoteqa.com/blog\r\n\r\nAm I missing some configuration?\n\n### Additional context\n\n```ts\r\n i18n: {\r\n defaultLocale: 'en',\r\n locales: [{\r\n code: 'en',\r\n iso: 'en',\r\n name: 'English',\r\n file: 'en.json',\r\n },\r\n {\r\n code: 'de',\r\n iso: 'de',\r\n name: 'Deutsch',\r\n file: 'de.json',\r\n },\r\n {\r\n code: 'it', \r\n iso: 'it',\r\n name: 'Italiano',\r\n file: 'it.json',\r\n }],\r\n strategy: 'prefix',\r\n lazy: false,\r\n langDir: 'locales/',\r\n },\r\n ```\r\n \r\n \n\n### Logs\n\n_No response_",[3257],{"name":3173,"color":3174},3062,"404 on all pages other than root with `prefix` strategy","2025-05-21T19:36:56Z","https://github.com/nuxt-modules/i18n/issues/3062",0.6472182,{"description":3264,"labels":3265,"number":3267,"owner":3179,"repository":3180,"state":3249,"title":3268,"updated_at":3269,"url":3270,"score":3271},"### Environment\n\n------------------------------\n- Operating System: Linux\n- Node Version: v20.19.1\n- Nuxt Version: 4.0.0\n- CLI Version: 3.26.3\n- Nitro Version: 2.12.0\n- Package Manager: pnpm@8.15.6\n- Builder: -\n- User Config: modules, devtools, i18n\n- Runtime Modules: @nuxtjs/i18n@10.0.1\n- Build Modules: -\n------------------------------\n\n### Reproduction\n\nhttps://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-zx2czsy7?file=nuxt.config.ts\n\n### Describe the bug\n\nWhen employing the prefix strategy, navigating to a page without a locale prefix (e.g., localhost:3000/test-page instead of localhost:3000/en/test-page) results in an HTTP 404 (Not Found) error. While the client-side URL subsequently updates to include the correct prefix, the server fails to issue a redirect.\n\nThe server should respond with a redirect to the prefixed URL, similar to how it handles redirects for the root path.\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3266],{"name":3173,"color":3174},3741,"Redirect to fallback local missing paths other then the root path","2025-07-21T08:40:29Z","https://github.com/nuxt-modules/i18n/issues/3741",0.64960074,["Reactive",3273],{},["Set"],["ShallowReactive",3276],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fUO_GH96e6heXFOCCRnrxbJZdkkzrtRa2dR8YHWXSJsM":-1},"/nuxt-modules/i18n/3733"]