\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```",[3207],{"name":3173,"color":3174},3771,"useRoute needs suffix to work","2025-08-05T16:28:06Z","https://github.com/nuxt-modules/i18n/issues/3771",0.70578885,{"description":3214,"labels":3215,"number":3217,"owner":3179,"repository":3180,"state":3218,"title":3219,"updated_at":3220,"url":3221,"score":3222},"### Environment\r\n\r\n------------------------------\r\n- Operating System: Windows_NT\r\n- Node Version: v18.16.0\r\n- Nuxt Version: 3.10.3\r\n- CLI Version: 3.10.1\r\n- Nitro Version: 2.8.1\r\n- Package Manager: pnpm@8.15.1\r\n- Builder: -\r\n- User Config: devtools, modules, ssr, content, i18n\r\n- Runtime Modules: @nuxt/content@2.12.0, @nuxtjs/i18n@8.1.1, nuxt-build-cache@0.1.1\r\n- Build Modules: -\r\n------------------------------\r\n\r\n### Reproduction\r\nhttps://github.com/kilianseitz/example\r\n\r\n### Describe the bug\r\nWe use nuxt-content with nuxt-i18n\r\n\r\nFor my project, I need to have two content folders for English and German. \r\nWhen I use 'build' or 'dev', the folders are created and the content is rendered correctly , but when I use 'generate', they are not generated and not rendered. ",[3216],{"name":3173,"color":3174},2819,"closed","Content folders not created when generating for static hosting","2025-05-16T12:03:03Z","https://github.com/nuxt-modules/i18n/issues/2819",0.67790794,{"description":3224,"labels":3225,"number":3228,"owner":3179,"repository":3180,"state":3218,"title":3229,"updated_at":3230,"url":3231,"score":3232},"### Describe the feature\n\nDependencies:\n```\n\"nuxt\": \"^4.0.3\",\n@nuxtjs/i18n\": \"^10.0.6\",\n```\n\nWe are unable to translate the root segment of dynamic routes during SSG, specifically when defining pages with a structure like this:\n\n```\napp\n├── pages\n│ └── something # not able to translate this part\n│ └── [slug].vue # able to translate this part\n```\n\nWe passed translated routes to `i18n.pages` property in `nuxt.config.ts` and pre-rendering translated routes with nitro, however, we faced an issue where the dynamic page root part cannot be translated.\n\nFor example desired result should be:\n**English**: /pages/something/some-slug\n**Translated**: /pages/something-translated/some-slug-translation\n\nActual result:\nWhen running nuxt generate we receive 404 error that /something-translated/some-slug-translation is not found\n\nCouldn’t find related issues. We are seeking guidance on whether the translation of dynamic page root part is a supported feature within the current Nuxt.js and @nuxtjs/i18n ecosystem, and if so, how to properly configure it to achieve the desired translated URL structure during SSG. Thanks!\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).",[3226,3227],{"name":3173,"color":3174},{"name":3176,"color":3177},3816,"Inability to translate dynamic page root part during SSG","2025-09-17T14:07:01Z","https://github.com/nuxt-modules/i18n/issues/3816",0.69511,{"description":3234,"labels":3235,"number":3238,"owner":3179,"repository":3180,"state":3218,"title":3239,"updated_at":3240,"url":3241,"score":3242},"### Environment\n\n- Operating System: Darwin\n- Node Version: v22.17.1\n- Nuxt Version: 4.1.0\n- CLI Version: 3.28.0\n- Nitro Version: 2.12.5\n- Package Manager: pnpm@10.13.1\n- Builder: -\n- User Config: compatibilityDate, devtools, modules, i18n, ssr\n- Runtime Modules: @nuxtjs/i18n@10.0.6\n- Build Modules: -\n\n### Reproduction\n\n`\u003Cremoved link to zip file>`\n\n### Describe the bug\n\n执行 `pnpm generate` \n[intlify] Not found 'welcome' key in 'en' locale messages. \n\n\u003Cimg width=\"835\" height=\"546\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/caf8e9e8-ce41-4789-a6e4-478d2a55c24d\" />\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3236,3237],{"name":3173,"color":3174},{"name":3176,"color":3177},3807,"静态生成时,.output下 locales语言文件是空的","2025-09-05T01:23:11Z","https://github.com/nuxt-modules/i18n/issues/3807",0.7002189,{"description":3244,"labels":3245,"number":3248,"owner":3179,"repository":3180,"state":3218,"title":3249,"updated_at":3250,"url":3251,"score":3252},"### Environment\n\nStatic site generation, to build with Nuxt 3\n\n\n### Reproduction\n\nin nuxt.config.ts, i18n: {langDir: 'lang'}\n\nit creates HTMLs, when using SSG, that contains local paths in its configLocales objects\n\n### Describe the bug\n\nHTMLs, when generated using SSG, contains local paths in its configLocales objects, for example, \"users/user1/projectName/lang/en.json\"\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3246,3247],{"name":3173,"color":3174},{"name":3176,"color":3177},3789,"Static site generation creates HTMLs that contain configLocales with local paths","2025-08-22T00:04:55Z","https://github.com/nuxt-modules/i18n/issues/3789",0.700405,{"description":3254,"labels":3255,"number":3258,"owner":3179,"repository":3180,"state":3218,"title":3259,"updated_at":3260,"url":3261,"score":3262},"### 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```",[3256,3257],{"name":3173,"color":3174},{"name":3176,"color":3177},3794,"SEO issue with SSR translations and unclear lazy-loading behavior","2025-10-07T14:52:13Z","https://github.com/nuxt-modules/i18n/issues/3794",0.70401865,{"description":3264,"labels":3265,"number":3267,"owner":3179,"repository":3180,"state":3218,"title":3268,"updated_at":3269,"url":3270,"score":3271},"### 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_",[3266],{"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.7077897,["Reactive",3273],{},["Set"],["ShallowReactive",3276],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fJSm-9c_796i1Q8WLFnzPXNeQVrQdXw2L3TB9mcvSJPY":-1},"/nuxt-modules/i18n/3624"]