[{"data":1,"prerenderedAt":6861},["ShallowReactive",2],{"navigation":3,"v3-navigation":406,"\u002Fguide\u002Fupgrade":733,"\u002Fguide\u002Fupgrade-surround":6856},[4,130,180,277,298,319,346],{"title":5,"order":6,"path":7,"stem":8,"children":9,"page":129},"Guide",10,"\u002Fguide","guide",[10,14,19,24,29,35,40,45,50,56,61,66,71,76,82,87,93,98,103,109,114,119,124],{"title":11,"path":12,"stem":13,"order":6,"group":11},"Getting started","\u002Fguide\u002Fgetting-started","guide\u002Fgetting-started",{"title":15,"path":16,"stem":17,"order":18,"group":11},"Migrating from @nuxtjs\u002Fi18n","\u002Fguide\u002Fmigration","guide\u002Fmigration",20,{"title":20,"path":21,"stem":22,"order":23,"group":11},"Upgrading","\u002Fguide\u002Fupgrade","guide\u002Fupgrade",30,{"title":25,"path":26,"stem":27,"order":28,"group":11},"FAQ","\u002Fguide\u002Ffaq","guide\u002Ffaq",40,{"title":30,"path":31,"stem":32,"order":33,"group":34},"Translation files","\u002Fguide\u002Ftranslations","guide\u002Ftranslations",50,"Core concepts",{"title":36,"path":37,"stem":38,"order":39,"group":34},"Page config","\u002Fguide\u002Fper-component-translations","guide\u002Fper-component-translations",60,{"title":41,"path":42,"stem":43,"order":44,"group":34},"Runtime overrides","\u002Fguide\u002Fruntime-overrides","guide\u002Fruntime-overrides",70,{"title":46,"path":47,"stem":48,"order":49,"group":34},"Server routes and API","\u002Fguide\u002Fserver-side-translations","guide\u002Fserver-side-translations",80,{"title":51,"path":52,"stem":53,"order":54,"group":55},"Routing strategies","\u002Fguide\u002Fstrategy","guide\u002Fstrategy",90,"Routing",{"title":57,"path":58,"stem":59,"order":60,"group":55},"Locale detection","\u002Fguide\u002Flocale-detection","guide\u002Flocale-detection",100,{"title":62,"path":63,"stem":64,"order":65,"group":55},"Localized paths","\u002Fguide\u002Fcustom-locale-routes","guide\u002Fcustom-locale-routes",110,{"title":67,"path":68,"stem":69,"order":70,"group":55},"Custom locale detection","\u002Fguide\u002Fcustom-auto-detect","guide\u002Fcustom-auto-detect",120,{"title":72,"path":73,"stem":74,"order":75,"group":55},"Excluding paths","\u002Fguide\u002Fexcluding-static-files","guide\u002Fexcluding-static-files",130,{"title":77,"path":78,"stem":79,"order":80,"group":81},"SEO","\u002Fguide\u002Fseo","guide\u002Fseo",140,"SEO and domains",{"title":83,"path":84,"stem":85,"order":86,"group":81},"Layers and domains","\u002Fguide\u002Flayers","guide\u002Flayers",150,{"title":88,"path":89,"stem":90,"order":91,"group":92},"Deployment","\u002Fguide\u002Fdeployment","guide\u002Fdeployment",160,"Production",{"title":94,"path":95,"stem":96,"order":97,"group":92},"Performance tuning","\u002Fguide\u002Fperformance","guide\u002Fperformance",170,{"title":99,"path":100,"stem":101,"order":102,"group":92},"Performance Test Results","\u002Fguide\u002Fperformance-results","guide\u002Fperformance-results",180,{"title":104,"path":105,"stem":106,"order":107,"group":108},"DevTools","\u002Fguide\u002Fdevtools","guide\u002Fdevtools",190,"Tooling",{"title":110,"path":111,"stem":112,"order":113,"group":108},"CLI","\u002Fguide\u002Fcli","guide\u002Fcli",200,{"title":115,"path":116,"stem":117,"order":118,"group":108},"Testing your app","\u002Fguide\u002Ftesting","guide\u002Ftesting",210,{"title":120,"path":121,"stem":122,"order":123,"group":108},"Storybook","\u002Fguide\u002Fstorybook","guide\u002Fstorybook",220,{"title":125,"path":126,"stem":127,"order":128,"group":108},"Crowdin","\u002Fguide\u002Fcrowdin","guide\u002Fcrowdin",230,false,{"title":131,"order":18,"path":132,"stem":133,"children":134},"Frameworks","\u002Fintegrations","integrations",[135,138,143,147,151,155,159,163,168,172,176],{"title":136,"path":132,"stem":137,"order":6},"Overview","integrations\u002Findex",{"title":139,"path":140,"stem":141,"order":18,"group":142},"Vue","\u002Fintegrations\u002Fvue-package","integrations\u002Fvue-package","UI frameworks",{"title":144,"path":145,"stem":146,"order":23,"group":142},"React and Preact","\u002Fintegrations\u002Freact-package","integrations\u002Freact-package",{"title":148,"path":149,"stem":150,"order":28,"group":142},"Solid","\u002Fintegrations\u002Fsolid-package","integrations\u002Fsolid-package",{"title":152,"path":153,"stem":154,"order":33,"group":142},"Astro","\u002Fintegrations\u002Fastro-package","integrations\u002Fastro-package",{"title":156,"path":157,"stem":158,"order":39,"group":142},"Astro islands","\u002Fintegrations\u002Fastro-islands","integrations\u002Fastro-islands",{"title":160,"path":161,"stem":162,"order":44,"group":142},"VitePress","\u002Fintegrations\u002Fvitepress-package","integrations\u002Fvitepress-package",{"title":164,"path":165,"stem":166,"order":49,"group":167},"Runtime","\u002Fintegrations\u002Fruntime-package","integrations\u002Fruntime-package","Runtimes",{"title":169,"path":170,"stem":171,"order":54,"group":167},"Node.js","\u002Fintegrations\u002Fnodejs-package","integrations\u002Fnodejs-package",{"title":173,"path":174,"stem":175,"order":60,"group":108},"Types generator","\u002Fintegrations\u002Ftypes-generator","integrations\u002Ftypes-generator",{"title":177,"path":178,"stem":179,"order":65,"group":108},"DevTools UI","\u002Fintegrations\u002Fdevtools-ui-package","integrations\u002Fdevtools-ui-package",{"title":181,"order":23,"path":182,"stem":183,"children":184},"API","\u002Fapi","api",[185,188,192,196,200,204],{"title":186,"path":182,"stem":187,"order":6},"API reference","api\u002Findex",{"title":189,"path":190,"stem":191,"order":18},"Module options","\u002Fapi\u002Fmodule-options","api\u002Fmodule-options",{"title":193,"path":194,"stem":195,"order":23},"CLI commands","\u002Fapi\u002Fcli","api\u002Fcli",{"title":197,"path":198,"stem":199,"order":28},"Helpers","\u002Fapi\u002Fmethods","api\u002Fmethods",{"title":201,"path":202,"stem":203,"order":33},"Hooks","\u002Fapi\u002Fevents","api\u002Fevents",{"title":205,"path":206,"stem":207,"children":208,"order":39},"Package APIs","\u002Fapi\u002Fpackages","api\u002Fpackages",[209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273],{"title":210,"path":211,"stem":212},"astro","\u002Fapi\u002Fpackages\u002Fastro","api\u002Fpackages\u002Fastro",{"title":214,"path":215,"stem":216},"cli","\u002Fapi\u002Fpackages\u002Fcli","api\u002Fpackages\u002Fcli",{"title":218,"path":219,"stem":220},"core","\u002Fapi\u002Fpackages\u002Fcore","api\u002Fpackages\u002Fcore",{"title":222,"path":223,"stem":224},"devtools-ui","\u002Fapi\u002Fpackages\u002Fdevtools-ui","api\u002Fpackages\u002Fdevtools-ui",{"title":226,"path":227,"stem":228},"node","\u002Fapi\u002Fpackages\u002Fnode","api\u002Fpackages\u002Fnode",{"title":230,"path":231,"stem":232},"path-strategy","\u002Fapi\u002Fpackages\u002Fpath-strategy","api\u002Fpackages\u002Fpath-strategy",{"title":234,"path":235,"stem":236},"preact","\u002Fapi\u002Fpackages\u002Fpreact","api\u002Fpackages\u002Fpreact",{"title":238,"path":239,"stem":240},"react","\u002Fapi\u002Fpackages\u002Freact","api\u002Fpackages\u002Freact",{"title":242,"path":243,"stem":244},"route-strategy","\u002Fapi\u002Fpackages\u002Froute-strategy","api\u002Fpackages\u002Froute-strategy",{"title":246,"path":247,"stem":248},"runtime","\u002Fapi\u002Fpackages\u002Fruntime","api\u002Fpackages\u002Fruntime",{"title":250,"path":251,"stem":252},"solid","\u002Fapi\u002Fpackages\u002Fsolid","api\u002Fpackages\u002Fsolid",{"title":254,"path":255,"stem":256},"test-utils","\u002Fapi\u002Fpackages\u002Ftest-utils","api\u002Fpackages\u002Ftest-utils",{"title":258,"path":259,"stem":260},"types","\u002Fapi\u002Fpackages\u002Ftypes","api\u002Fpackages\u002Ftypes",{"title":262,"path":263,"stem":264},"types-generator","\u002Fapi\u002Fpackages\u002Ftypes-generator","api\u002Fpackages\u002Ftypes-generator",{"title":266,"path":267,"stem":268},"utils","\u002Fapi\u002Fpackages\u002Futils","api\u002Fpackages\u002Futils",{"title":270,"path":271,"stem":272},"vitepress","\u002Fapi\u002Fpackages\u002Fvitepress","api\u002Fpackages\u002Fvitepress",{"title":274,"path":275,"stem":276},"vue","\u002Fapi\u002Fpackages\u002Fvue","api\u002Fpackages\u002Fvue",{"title":278,"order":28,"path":279,"stem":280,"children":281,"page":129},"Composables","\u002Fcomposables","composables",[282,286,290,294],{"title":283,"path":284,"stem":285,"order":6},"useI18n","\u002Fcomposables\u002FuseI18n","composables\u002FuseI18n",{"title":287,"path":288,"stem":289,"order":18},"useI18nLocale","\u002Fcomposables\u002FuseI18nLocale","composables\u002FuseI18nLocale",{"title":291,"path":292,"stem":293,"order":23},"useI18nHead","\u002Fcomposables\u002FuseI18nHead","composables\u002FuseI18nHead",{"title":295,"path":296,"stem":297,"order":28},"useLocaleHead","\u002Fcomposables\u002FuseLocaleHead","composables\u002FuseLocaleHead",{"title":299,"order":33,"path":300,"stem":301,"children":302,"page":129},"Components","\u002Fcomponents","components",[303,307,311,315],{"title":304,"path":305,"stem":306,"order":6},"\u003Ci18n-t>","\u002Fcomponents\u002Fi18n-t","components\u002Fi18n-t",{"title":308,"path":309,"stem":310,"order":18},"\u003Ci18n-link>","\u002Fcomponents\u002Fi18n-link","components\u002Fi18n-link",{"title":312,"path":313,"stem":314,"order":23},"\u003Ci18n-switcher>","\u002Fcomponents\u002Fi18n-switcher","components\u002Fi18n-switcher",{"title":316,"path":317,"stem":318,"order":28},"\u003Ci18n-group>","\u002Fcomponents\u002Fi18n-group","components\u002Fi18n-group",{"title":320,"order":39,"path":321,"stem":322,"children":323},"Contributing","\u002Fcontributing","contributing",[324,326,330,334,338,342],{"title":320,"path":321,"stem":325,"order":6},"contributing\u002Findex",{"title":327,"path":328,"stem":329,"order":18},"Architecture","\u002Fcontributing\u002Farchitecture","contributing\u002Farchitecture",{"title":331,"path":332,"stem":333,"order":23},"Testing the module","\u002Fcontributing\u002Ftesting","contributing\u002Ftesting",{"title":335,"path":336,"stem":337,"order":28},"Maintenance commands","\u002Fcontributing\u002Fmaintenance-commands","contributing\u002Fmaintenance-commands",{"title":339,"path":340,"stem":341,"order":33},"Release smoke checks","\u002Fcontributing\u002Frelease-smoke","contributing\u002Frelease-smoke",{"title":343,"path":344,"stem":345,"order":39},"Benchmark methodology","\u002Fcontributing\u002Fperformance-methodology","contributing\u002Fperformance-methodology",{"title":347,"path":348,"stem":349,"children":350,"order":44},"News","\u002Fnews","news\u002Findex",[351,354,358,362,366,370,374,378,382,386,390,394,398,402],{"title":352,"path":348,"stem":349,"order":353},"News & Releases",1,{"title":355,"path":356,"stem":357,"order":6},"v4.0.0","\u002Fnews\u002Fv4.0.0","news\u002Fv4.0.0",{"title":359,"path":360,"stem":361,"order":18},"v3.24.0","\u002Fnews\u002Fv3.24.0","news\u002Fv3.24.0",{"title":363,"path":364,"stem":365,"order":23},"v3.22.0","\u002Fnews\u002Fv3.22.0","news\u002Fv3.22.0",{"title":367,"path":368,"stem":369,"order":28},"v3.21.0","\u002Fnews\u002Fv3.21.0","news\u002Fv3.21.0",{"title":371,"path":372,"stem":373,"order":33},"v3.20.0","\u002Fnews\u002Fv3.20.0","news\u002Fv3.20.0",{"title":375,"path":376,"stem":377,"order":39},"v3.19.0","\u002Fnews\u002Fv3.19.0","news\u002Fv3.19.0",{"title":379,"path":380,"stem":381,"order":44},"v3.0.0","\u002Fnews\u002Fv3.0.0","news\u002Fv3.0.0",{"title":383,"path":384,"stem":385,"order":49},"v2.14.1","\u002Fnews\u002Fv2.14.1","news\u002Fv2.14.1",{"title":387,"path":388,"stem":389,"order":54},"v2.0.0","\u002Fnews\u002Fv2.0.0","news\u002Fv2.0.0",{"title":391,"path":392,"stem":393,"order":60},"v1.73.0","\u002Fnews\u002Fv1.73.0","news\u002Fv1.73.0",{"title":395,"path":396,"stem":397,"order":65},"v1.65.0","\u002Fnews\u002Fv1.65.0","news\u002Fv1.65.0",{"title":399,"path":400,"stem":401,"order":70},"v1.58.0","\u002Fnews\u002Fv1.58.0","news\u002Fv1.58.0",{"title":403,"path":404,"stem":405,"order":75},"v1.1.0","\u002Fnews\u002Fv1.1.0","news\u002Fv1.1.0",[407],{"title":408,"path":409,"stem":410,"children":411},"V3","\u002Fv3","v3",[412,415,552,598,691,712,729],{"title":136,"path":409,"stem":413,"order":414},"v3\u002Findex",0,{"title":5,"order":6,"path":416,"stem":417,"children":418,"page":129},"\u002Fv3\u002Fguide","v3\u002Fguide",[419,424,428,432,436,441,445,449,453,457,461,465,469,473,478,482,487,491,495,499,503,507,511,514,518,522,527,533,538,542,547],{"title":420,"path":421,"stem":422,"order":6,"group":423},"Getting Started","\u002Fv3\u002Fguide\u002Fgetting-started","v3\u002Fguide\u002Fgetting-started","Basics",{"title":425,"path":426,"stem":427,"order":18,"group":423},"Configuration","\u002Fv3\u002Fguide\u002Fconfiguration","v3\u002Fguide\u002Fconfiguration",{"title":429,"path":430,"stem":431,"order":23,"group":423},"Folder Structure","\u002Fv3\u002Fguide\u002Ffolder-structure","v3\u002Fguide\u002Ffolder-structure",{"title":433,"path":434,"stem":435,"order":28,"group":423},"Routing Strategy","\u002Fv3\u002Fguide\u002Fstrategy","v3\u002Fguide\u002Fstrategy",{"title":437,"path":438,"stem":439,"order":33,"group":440},"Translating Content","\u002Fv3\u002Fguide\u002Fusing","v3\u002Fguide\u002Fusing","Usage",{"title":442,"path":443,"stem":444,"order":39,"group":440},"Per Component Translations","\u002Fv3\u002Fguide\u002Fper-component-translations","v3\u002Fguide\u002Fper-component-translations",{"title":446,"path":447,"stem":448,"order":44,"group":440},"Custom Localized Routes","\u002Fv3\u002Fguide\u002Fcustom-locale-routes","v3\u002Fguide\u002Fcustom-locale-routes",{"title":450,"path":451,"stem":452,"order":49,"group":440},"Custom Auto Detect","\u002Fv3\u002Fguide\u002Fcustom-auto-detect","v3\u002Fguide\u002Fcustom-auto-detect",{"title":454,"path":455,"stem":456,"order":54,"group":440},"Runtime Overrides","\u002Fv3\u002Fguide\u002Fruntime-overrides","v3\u002Fguide\u002Fruntime-overrides",{"title":458,"path":459,"stem":460,"order":60,"group":440},"Layers","\u002Fv3\u002Fguide\u002Flayers","v3\u002Fguide\u002Flayers",{"title":77,"path":462,"stem":463,"order":65,"group":464},"\u002Fv3\u002Fguide\u002Fseo","v3\u002Fguide\u002Fseo","SEO & URLs",{"title":466,"path":467,"stem":468,"order":70,"group":464},"Multi Domain Locales","\u002Fv3\u002Fguide\u002Fmulti-domain-locales","v3\u002Fguide\u002Fmulti-domain-locales",{"title":470,"path":471,"stem":472,"order":75,"group":464},"Excluding Static Files","\u002Fv3\u002Fguide\u002Fexcluding-static-files","v3\u002Fguide\u002Fexcluding-static-files",{"title":474,"path":475,"stem":476,"order":80,"group":477},"Performance","\u002Fv3\u002Fguide\u002Fperformance","v3\u002Fguide\u002Fperformance","Performance & Deployment",{"title":479,"path":480,"stem":481,"order":86,"group":477},"Benchmark Results","\u002Fv3\u002Fguide\u002Fperformance-results","v3\u002Fguide\u002Fperformance-results",{"title":483,"path":484,"stem":485,"order":486,"group":477},"Performance methodology","\u002Fv3\u002Fguide\u002Fperformance-methodology","v3\u002Fguide\u002Fperformance-methodology",155,{"title":488,"path":489,"stem":490,"order":91,"group":477},"Server Side Translations","\u002Fv3\u002Fguide\u002Fserver-side-translations","v3\u002Fguide\u002Fserver-side-translations",{"title":492,"path":493,"stem":494,"order":97,"group":477},"Firebase Deployment","\u002Fv3\u002Fguide\u002Ffirebase","v3\u002Fguide\u002Ffirebase",{"title":496,"path":497,"stem":498,"order":102,"group":477},"Release Smoke Checks","\u002Fv3\u002Fguide\u002Frelease-smoke","v3\u002Fguide\u002Frelease-smoke",{"title":500,"path":501,"stem":502,"order":107,"group":477},"Preset local testing","\u002Fv3\u002Fguide\u002Fpreset-local-testing","v3\u002Fguide\u002Fpreset-local-testing",{"title":504,"path":505,"stem":506,"order":113,"group":477},"Maintenance Commands","\u002Fv3\u002Fguide\u002Fmaintenance-commands","v3\u002Fguide\u002Fmaintenance-commands",{"title":508,"path":509,"stem":510,"order":118,"group":108},"CLI Tool","\u002Fv3\u002Fguide\u002Fcli","v3\u002Fguide\u002Fcli",{"title":104,"path":512,"stem":513,"order":123,"group":108},"\u002Fv3\u002Fguide\u002Fdevtools","v3\u002Fguide\u002Fdevtools",{"title":515,"path":516,"stem":517,"order":128,"group":108},"Testing Your App","\u002Fv3\u002Fguide\u002Ftesting","v3\u002Fguide\u002Ftesting",{"title":120,"path":519,"stem":520,"order":521,"group":108},"\u002Fv3\u002Fguide\u002Fstorybook","v3\u002Fguide\u002Fstorybook",240,{"title":523,"path":524,"stem":525,"order":526,"group":108},"Crowdin Integration","\u002Fv3\u002Fguide\u002Fcrowdin","v3\u002Fguide\u002Fcrowdin",250,{"title":528,"path":529,"stem":530,"order":531,"group":532},"Migration from nuxt-i18n","\u002Fv3\u002Fguide\u002Fmigration","v3\u002Fguide\u002Fmigration",260,"Migration & Help",{"title":534,"path":535,"stem":536,"order":537,"group":532},"Upgrade to v3","\u002Fv3\u002Fguide\u002Fv3-upgrade","v3\u002Fguide\u002Fv3-upgrade",270,{"title":25,"path":539,"stem":540,"order":541,"group":532},"\u002Fv3\u002Fguide\u002Ffaq","v3\u002Fguide\u002Ffaq",280,{"title":543,"path":544,"stem":545,"order":546,"group":532},"Contribution","\u002Fv3\u002Fguide\u002Fcontribution","v3\u002Fguide\u002Fcontribution",290,{"title":548,"path":549,"stem":550,"order":551,"group":532},"Testing the Module","\u002Fv3\u002Fguide\u002Ftesting-strategies","v3\u002Fguide\u002Ftesting-strategies",300,{"title":553,"order":18,"path":554,"stem":555,"children":556},"Integrations","\u002Fv3\u002Fintegrations","v3\u002Fintegrations\u002Findex",[557,558,562,566,570,574,578,582,586,590,594],{"title":136,"path":554,"stem":555,"order":6},{"title":559,"path":560,"stem":561,"order":18},"Vue Package","\u002Fv3\u002Fintegrations\u002Fvue-package","v3\u002Fintegrations\u002Fvue-package",{"title":563,"path":564,"stem":565,"order":23},"React Package","\u002Fv3\u002Fintegrations\u002Freact-package","v3\u002Fintegrations\u002Freact-package",{"title":567,"path":568,"stem":569,"order":28},"Preact Package","\u002Fv3\u002Fintegrations\u002Fpreact-package","v3\u002Fintegrations\u002Fpreact-package",{"title":571,"path":572,"stem":573,"order":33},"Solid Package","\u002Fv3\u002Fintegrations\u002Fsolid-package","v3\u002Fintegrations\u002Fsolid-package",{"title":575,"path":576,"stem":577,"order":39},"Astro Package","\u002Fv3\u002Fintegrations\u002Fastro-package","v3\u002Fintegrations\u002Fastro-package",{"title":579,"path":580,"stem":581,"order":44},"VitePress Package","\u002Fv3\u002Fintegrations\u002Fvitepress-package","v3\u002Fintegrations\u002Fvitepress-package",{"title":583,"path":584,"stem":585,"order":49},"Runtime Package","\u002Fv3\u002Fintegrations\u002Fruntime-package","v3\u002Fintegrations\u002Fruntime-package",{"title":587,"path":588,"stem":589,"order":54},"Node.js Package","\u002Fv3\u002Fintegrations\u002Fnodejs-package","v3\u002Fintegrations\u002Fnodejs-package",{"title":591,"path":592,"stem":593,"order":60},"Types Generator","\u002Fv3\u002Fintegrations\u002Ftypes-generator","v3\u002Fintegrations\u002Ftypes-generator",{"title":595,"path":596,"stem":597,"order":65},"Devtools Package","\u002Fv3\u002Fintegrations\u002Fdevtools-ui-package","v3\u002Fintegrations\u002Fdevtools-ui-package",{"title":181,"order":23,"path":599,"stem":600,"children":601},"\u002Fv3\u002Fapi","v3\u002Fapi\u002Findex",[602,603,607,611,615,619],{"title":136,"path":599,"stem":600,"order":6},{"title":604,"path":605,"stem":606,"order":18},"Methods","\u002Fv3\u002Fapi\u002Fmethods","v3\u002Fapi\u002Fmethods",{"title":608,"path":609,"stem":610,"order":23},"Events","\u002Fv3\u002Fapi\u002Fevents","v3\u002Fapi\u002Fevents",{"title":612,"path":613,"stem":614,"order":28},"Translations and Cache","\u002Fv3\u002Fapi\u002Fi18n-cache-api","v3\u002Fapi\u002Fi18n-cache-api",{"title":616,"path":617,"stem":618,"order":33},"Module Options","\u002Fv3\u002Fapi\u002Fmodule-options","v3\u002Fapi\u002Fmodule-options",{"title":205,"path":620,"stem":621,"children":622,"order":39},"\u002Fv3\u002Fapi\u002Fpackages","v3\u002Fapi\u002Fpackages",[623,627,631,635,639,643,647,651,655,659,663,667,671,675,679,683,687],{"title":624,"path":625,"stem":626},"@i18n-micro\u002Fastro","\u002Fv3\u002Fapi\u002Fpackages\u002Fastro","v3\u002Fapi\u002Fpackages\u002Fastro",{"title":628,"path":629,"stem":630},"@i18n-micro\u002Fcore","\u002Fv3\u002Fapi\u002Fpackages\u002Fcore","v3\u002Fapi\u002Fpackages\u002Fcore",{"title":632,"path":633,"stem":634},"@i18n-micro\u002Fdevtools-ui","\u002Fv3\u002Fapi\u002Fpackages\u002Fdevtools-ui","v3\u002Fapi\u002Fpackages\u002Fdevtools-ui",{"title":636,"path":637,"stem":638},"@i18n-micro\u002Fhmr","\u002Fv3\u002Fapi\u002Fpackages\u002Fhmr","v3\u002Fapi\u002Fpackages\u002Fhmr",{"title":640,"path":641,"stem":642},"@i18n-micro\u002Fnode","\u002Fv3\u002Fapi\u002Fpackages\u002Fnode","v3\u002Fapi\u002Fpackages\u002Fnode",{"title":644,"path":645,"stem":646},"@i18n-micro\u002Fpath-strategy","\u002Fv3\u002Fapi\u002Fpackages\u002Fpath-strategy","v3\u002Fapi\u002Fpackages\u002Fpath-strategy",{"title":648,"path":649,"stem":650},"@i18n-micro\u002Fpreact","\u002Fv3\u002Fapi\u002Fpackages\u002Fpreact","v3\u002Fapi\u002Fpackages\u002Fpreact",{"title":652,"path":653,"stem":654},"@i18n-micro\u002Freact","\u002Fv3\u002Fapi\u002Fpackages\u002Freact","v3\u002Fapi\u002Fpackages\u002Freact",{"title":656,"path":657,"stem":658},"@i18n-micro\u002Froute-strategy","\u002Fv3\u002Fapi\u002Fpackages\u002Froute-strategy","v3\u002Fapi\u002Fpackages\u002Froute-strategy",{"title":660,"path":661,"stem":662},"@i18n-micro\u002Fruntime","\u002Fv3\u002Fapi\u002Fpackages\u002Fruntime","v3\u002Fapi\u002Fpackages\u002Fruntime",{"title":664,"path":665,"stem":666},"@i18n-micro\u002Fsolid","\u002Fv3\u002Fapi\u002Fpackages\u002Fsolid","v3\u002Fapi\u002Fpackages\u002Fsolid",{"title":668,"path":669,"stem":670},"@i18n-micro\u002Ftest-utils","\u002Fv3\u002Fapi\u002Fpackages\u002Ftest-utils","v3\u002Fapi\u002Fpackages\u002Ftest-utils",{"title":672,"path":673,"stem":674},"@i18n-micro\u002Ftypes","\u002Fv3\u002Fapi\u002Fpackages\u002Ftypes","v3\u002Fapi\u002Fpackages\u002Ftypes",{"title":676,"path":677,"stem":678},"@i18n-micro\u002Ftypes-generator","\u002Fv3\u002Fapi\u002Fpackages\u002Ftypes-generator","v3\u002Fapi\u002Fpackages\u002Ftypes-generator",{"title":680,"path":681,"stem":682},"@i18n-micro\u002Futils","\u002Fv3\u002Fapi\u002Fpackages\u002Futils","v3\u002Fapi\u002Fpackages\u002Futils",{"title":684,"path":685,"stem":686},"@i18n-micro\u002Fvitepress","\u002Fv3\u002Fapi\u002Fpackages\u002Fvitepress","v3\u002Fapi\u002Fpackages\u002Fvitepress",{"title":688,"path":689,"stem":690},"@i18n-micro\u002Fvue","\u002Fv3\u002Fapi\u002Fpackages\u002Fvue","v3\u002Fapi\u002Fpackages\u002Fvue",{"title":299,"order":28,"path":692,"stem":693,"children":694},"\u002Fv3\u002Fcomponents","v3\u002Fcomponents\u002Findex",[695,696,700,704,708],{"title":136,"path":692,"stem":693,"order":6},{"title":697,"path":698,"stem":699,"order":18},"i18n-t","\u002Fv3\u002Fcomponents\u002Fi18n-t","v3\u002Fcomponents\u002Fi18n-t",{"title":701,"path":702,"stem":703,"order":23},"i18n-switcher","\u002Fv3\u002Fcomponents\u002Fi18n-switcher","v3\u002Fcomponents\u002Fi18n-switcher",{"title":705,"path":706,"stem":707,"order":28},"i18n-link","\u002Fv3\u002Fcomponents\u002Fi18n-link","v3\u002Fcomponents\u002Fi18n-link",{"title":709,"path":710,"stem":711,"order":33},"i18n-group","\u002Fv3\u002Fcomponents\u002Fi18n-group","v3\u002Fcomponents\u002Fi18n-group",{"title":278,"path":713,"stem":714,"children":715,"order":33},"\u002Fv3\u002Fcomposables","v3\u002Fcomposables\u002Findex",[716,717,720,723,726],{"title":136,"path":713,"stem":714,"order":6},{"title":283,"path":718,"stem":719,"order":18},"\u002Fv3\u002Fcomposables\u002FuseI18n","v3\u002Fcomposables\u002FuseI18n",{"title":295,"path":721,"stem":722,"order":23},"\u002Fv3\u002Fcomposables\u002FuseLocaleHead","v3\u002Fcomposables\u002FuseLocaleHead",{"title":291,"path":724,"stem":725,"order":28},"\u002Fv3\u002Fcomposables\u002FuseI18nHead","v3\u002Fcomposables\u002FuseI18nHead",{"title":287,"path":727,"stem":728,"order":33},"\u002Fv3\u002Fcomposables\u002FuseI18nLocale","v3\u002Fcomposables\u002FuseI18nLocale",{"title":730,"path":731,"stem":732,"order":39},"Examples","\u002Fv3\u002Fexamples","v3\u002Fexamples",{"id":734,"title":20,"body":735,"description":6847,"extension":6848,"lastUpdated":6849,"links":6850,"meta":6851,"navigation":6853,"path":21,"seo":6854,"stem":22,"__hash__":6855},"docs\u002Fguide\u002Fupgrade.md",{"type":736,"value":737,"toc":6819},"minimark",[738,742,751,769,774,797,802,939,977,1307,1318,1321,1325,1770,1774,2056,2064,2067,2267,2273,2493,2497,2502,2703,2706,2938,2942,3074,3078,3597,3601,3615,3852,3859,4016,4020,4167,4171,4449,4452,4458,4468,4936,4941,5085,5090,5572,5577,5632,5639,5767,5770,5773,5780,6039,6046,6261,6270,6514,6518,6522,6574,6611,6615,6626,6646,6650,6655,6675,6679,6694,6796,6800,6816],[739,740,20],"h1",{"id":741},"upgrading",[743,744,745,746,750],"p",{},"This page lists what changes for your app when you upgrade nuxt-i18n-micro and its ",[747,748,749],"code",{},"@i18n-micro\u002F*"," packages. Read the section for the version you come from before you bump the dependency. Most apps need few code changes.",[752,753,754],"tip",{},[743,755,756,764,765,768],{},[757,758,759,760,763],"strong",{},"Coming from ",[747,761,762],{},"@nuxtjs\u002Fi18n","?"," — See ",[766,767,15],"a",{"href":16},".",[770,771,773],"h2",{"id":772},"after-3303-the-major-release","After 3.30.3: the major release",[743,775,776,777,780,781,780,784,787,788,792,793,768],{},"Module options, ",[747,778,779],{},"$t",", ",[747,782,783],{},"$localePath",[747,785,786],{},"$switchLocale"," and the other helpers, components, composables and documented server utilities keep their names. What changed is behaviour, mostly bugs fixed. Adapter packages and the routing packages have real API breaks: see ",[766,789,791],{"href":790},"#framework-packages","Framework packages"," and ",[766,794,796],{"href":795},"#other-packages","Other packages",[798,799,801],"h3",{"id":800},"do-this-first","Do this first",[803,804,805,827,870,876,912,933],"ol",{},[806,807,808,811,812,815,816,819,820,823,824,826],"li",{},[757,809,810],{},"Check your versions."," The module needs Nuxt 3.18 or newer and Node 20 or newer. Nuxt has its own Node minimum: Nuxt 4.5 declares ",[747,813,814],{},"^22.19.0 || ^24.11.0 || >=26.0.0",". ",[747,817,818],{},"nuxt generate"," on Nuxt 3.18.0 itself fails in plain Nuxt too (",[747,821,822],{},"[unstorage] Invalid key: \"\u002F\"","); 3.21.11 works. ",[747,825,652],{}," needs React 18 or newer.",[806,828,829,832],{},[757,830,831],{},"Fix the installed packages.",[833,834,835,841,851],"ul",{},[806,836,837,838,840],{},"Remove ",[747,839,636],{},". Translation HMR is built into the module.",[806,842,843,844,846,847,850],{},"If your tests import ",[747,845,668],{},", add it: ",[747,848,849],{},"npm install -D @i18n-micro\u002Ftest-utils",". It is no longer installed with the module.",[806,852,853,854,857,858,861,862,865,866,768],{},"Replace ",[747,855,856],{},"nuxt-i18n-micro-cli"," with ",[747,859,860],{},"@i18n-micro\u002Fcli",". 28 commands became 16, ",[747,863,864],{},"check"," replaces three of them, and exit codes change: see ",[766,867,869],{"href":868},"\u002Fguide\u002Fcli#moving-from-nuxt-i18n-micro-cli","the CLI guide",[806,871,872,875],{},[757,873,874],{},"Search your code"," for the entries in the table below.",[806,877,878,881,882,885,886,890,891,894,895,899,900,903,904,907,908,768],{},[757,879,880],{},"Check what sits in front of the app."," With ",[747,883,884],{},"baseUrl"," on locales behind a proxy, see ",[766,887,889],{"href":888},"\u002Fguide\u002Fdeployment#behind-a-proxy-or-cdn","Behind a proxy or CDN",". With a CDN, check its cache key against the ",[747,892,893],{},"Vary"," header: see ",[766,896,898],{"href":897},"\u002Fguide\u002Fdeployment#caching-html","Caching HTML",". With ",[747,901,902],{},"apiBaseClientHost"," or a strict CSP, allow the new ",[747,905,906],{},"preload"," link: see ",[766,909,911],{"href":910},"#seo-and-head-tags","SEO and head tags",[806,913,914,917,918,920,921,928,929,932],{},[757,915,916],{},"Update snapshots."," Head snapshots gain the ",[747,919,906],{}," link, switcher markup changed (",[766,922,924,792,926],{"href":923},"#i18n-switcher-and-i18n-link",[747,925,312],{},[747,927,308],{},"), and query strings in ",[747,930,931],{},"$localeRoute"," output are encoded differently.",[806,934,935,938],{},[757,936,937],{},"Open your pages in each locale and look for raw keys."," Layouts that used keys of the previous page's file now show them raw: move those keys to the root file.",[940,941,942],"caution",{},[743,943,944,953,954,957,958,815,961,964,965,968,969,972,973,976],{},[757,945,946,949,950,952],{},[747,947,948],{},"switchLocaleRoute"," of ",[747,951,644],{}," lost its first argument"," — ",[747,955,956],{},"switchLocaleRoute(fromLocale, toLocale, route, options)"," is now ",[747,959,960],{},"switchLocaleRoute(toLocale, route, options)",[757,962,963],{},"An old JavaScript call does not fail: it returns a wrong result,"," because ",[747,966,967],{},"fromLocale"," is read as the target and ",[747,970,971],{},"toLocale"," as the route. Only TypeScript tells you. Nuxt's ",[747,974,975],{},"$switchLocaleRoute"," is not affected.",[978,979,980,993],"table",{},[981,982,983],"thead",{},[984,985,986,990],"tr",{},[987,988,989],"th",{},"Search for",[987,991,992],{},"Do this",[994,995,996,1010,1032,1050,1073,1100,1134,1173,1205,1227,1242,1259,1273],"tbody",{},[984,997,998,1007],{},[999,1000,1001,1004,1005],"td",{},[747,1002,1003],{},"switchLocaleRoute("," from ",[747,1006,644],{},[999,1008,1009],{},"Drop the first argument, see above",[984,1011,1012,1025],{},[999,1013,1014,1017,1018,1021,1022],{},[747,1015,1016],{},"i18n-plugin-hooks"," or ",[747,1019,1020],{},"i18n-plugin-define"," in a ",[747,1023,1024],{},"dependsOn",[999,1026,1027,1028,1031],{},"Use ",[747,1029,1030],{},"i18n-plugin-loader",". The old names no longer wait for anything, with no error",[984,1033,1034,1043],{},[999,1035,1036,1039,1040],{},[747,1037,1038],{},"localized-…"," names in ",[747,1041,1042],{},"router.push({ name })",[999,1044,1045,1046,1017,1048],{},"Pass the page's own name to ",[747,1047,931],{},[747,1049,308],{},[984,1051,1052,1066],{},[999,1053,1054,1017,1057,1060,1061,1017,1063,1065],{},[747,1055,1056],{},".name",[747,1058,1059],{},".params"," on a ",[747,1062,931],{},[747,1064,975],{}," result",[999,1067,1068,1069],{},"Handle their absence, see ",[766,1070,1072],{"href":1071},"#links-and-route-objects","Links",[984,1074,1075,1091],{},[999,1076,1077,1080,1081,1017,1084,1087,1088,1090],{},[747,1078,1079],{},"$localeRoute(x, 'fr')"," in ",[747,1082,1083],{},"\u003CNuxtLink :to>",[747,1085,1086],{},"router.push",", with ",[747,1089,884],{}," on locales",[999,1092,1027,1093,1095,1096],{},[747,1094,783],{},", see ",[766,1097,1099],{"href":1098},"#locale-domains","Locale domains",[984,1101,1102,1127],{},[999,1103,1104,1107,1108,780,1111,780,1114,780,1117,780,1120,780,1123,1126],{},[747,1105,1106],{},"$getI18nConfig().globalLocaleRoutes",", or ",[747,1109,1110],{},"isSSG",[747,1112,1113],{},"hmr",[747,1115,1116],{},"hooks",[747,1118,1119],{},"noPrefixRedirect",[747,1121,1122],{},"routeLocales",[747,1124,1125],{},"routeDisableMeta"," from it",[999,1128,1129,1130,1133],{},"They are gone from the runtime config. Only the build read them, and the options themselves are unchanged. ",[747,1131,1132],{},"ModuleOptionsExtend.isSSG"," stays as an optional, deprecated property that nothing sets",[984,1135,1136,1151],{},[999,1137,1138,1139,780,1142,780,1145,780,1148],{},"Server auto-imports other than ",[747,1140,1141],{},"useLocaleServerMiddleware",[747,1143,1144],{},"useTranslationServerMiddleware",[747,1146,1147],{},"loadTranslationsFromServer",[747,1149,1150],{},"detectCurrentLocale",[999,1152,1153,1154,780,1157,780,1160,780,1163,780,1166,780,1169,1172],{},"Drop them. ",[747,1155,1156],{},"getI18nServerConfig",[747,1158,1159],{},"detectRequestLocale",[747,1161,1162],{},"getRequestLocale",[747,1164,1165],{},"loadLiveDevTranslations",[747,1167,1168],{},"getOrCreateServerTranslationCache",[747,1170,1171],{},"DEFAULT_SERVER_CACHE_SIZE"," and the watcher helpers no longer auto-import",[984,1174,1175,1198],{},[999,1176,1177,780,1180,780,1183,780,1186,780,1189,780,1192,1004,1195],{},[747,1178,1179],{},"resolveTranslationPayloadMode",[747,1181,1182],{},"resolveTranslationPayloadOptions",[747,1184,1185],{},"resolveTranslationPayloadPublicDir",[747,1187,1188],{},"resolveTranslationPayloadPublicRel",[747,1190,1191],{},"shouldCopyTranslationPayloadsToPublic",[747,1193,1194],{},"shouldRegisterNitroServerAssets",[747,1196,1197],{},"nuxt-i18n-micro",[999,1199,1200,1201,1204],{},"Drop them. The ",[747,1202,1203],{},"TranslationPayloadMode"," type stays",[984,1206,1207,1219],{},[999,1208,1209,1212,1213,1215,1216],{},[747,1210,1211],{},"html"," on ",[747,1214,304],{}," with markup in ",[747,1217,1218],{},"params",[999,1220,1221,1222],{},"Move the markup into the translation, see ",[766,1223,1225],{"href":1224},"#i18n-t",[747,1226,304],{},[984,1228,1229,1236],{},[999,1230,1231,1212,1234],{},[747,1232,1233],{},"ref",[747,1235,304],{},[999,1237,1238,1239,1241],{},"It is a functional component, so a ",[747,1240,1233],{}," gives no instance",[984,1243,1244,1250],{},[999,1245,1246,1249],{},[747,1247,1248],{},"useI18n().$t = stub"," and similar writes",[999,1251,1252,1255,1256,1258],{},[747,1253,1254],{},"useI18n()"," is one object per app, so a write reaches every caller. Stub ",[747,1257,283],{}," itself",[984,1260,1261,1267],{},[999,1262,1263,1266],{},[747,1264,1265],{},"ModuleHooks"," type",[999,1268,1269,1270],{},"Renamed ",[747,1271,1272],{},"ModuleRuntimeHooks",[984,1274,1275,1286],{},[999,1276,1277,780,1280,1004,1283],{},[747,1278,1279],{},"resolveServerLocale",[747,1281,1282],{},"resolvePreferredLocale",[747,1284,1285],{},"@i18n-micro\u002Futils\u002Fresolve-locale",[999,1287,1288,1289,857,1292,780,1295,780,1298,780,1301,792,1304],{},"Call ",[747,1290,1291],{},"resolveLocale",[747,1293,1294],{},"url",[747,1296,1297],{},"query",[747,1299,1300],{},"state",[747,1302,1303],{},"cookie",[747,1305,1306],{},"acceptLanguage",[743,1308,1309,1311,1312,1317],{},[747,1310,1150],{}," is deprecated. It still works and is still a server auto-import; use ",[766,1313,1314],{"href":47},[747,1315,1316],{},"useLocaleServerMiddleware(event).current",", which applies the same rules.",[743,1319,1320],{},"17 pages of these docs moved. The old URLs redirect, so links to them keep working.",[798,1322,1324],{"id":1323},"urls-and-redirects","URLs and redirects",[833,1326,1327,1346,1399,1413,1440,1472,1491,1508,1525,1550,1567,1585,1606,1619,1643,1653,1666,1675,1688,1704,1727,1741,1757],{},[806,1328,1329,1341,1342,1345],{},[757,1330,1331,792,1334,1337,1338],{},[747,1332,1333],{},"\u002Fen",[747,1335,1336],{},"\u002Fen\u002F..."," are a 404 under ",[747,1339,1340],{},"prefix_except_default"," (",[747,1343,1344],{},"en"," being the default), as documented.",[806,1347,1348,1351,1352,1355,1356,1359,1360,1363,1364,1341,1367,1363,1370,1373,1374,1376,1377,1380,1381,1384,1385,1390,1391,1394,1395,1398],{},[757,1349,1350],{},"A locale prefix in another case or spelling redirects to the page in its own spelling."," ",[747,1353,1354],{},"\u002FDE\u002Fabout"," used to render the German route in the default locale, or redirect to ",[747,1357,1358],{},"\u002Fen\u002FDE\u002Fabout","; it is now a ",[747,1361,1362],{},"302"," to ",[747,1365,1366],{},"\u002Fde\u002Fabout",[747,1368,1369],{},"\u002FEN\u002Fabout",[747,1371,1372],{},"\u002Fabout"," under ",[747,1375,1340],{},"). With no page behind the URL in its own spelling it is a 404. A page of its own on that URL (",[747,1378,1379],{},"pages\u002FDE\u002Fabout.vue",") stays a page. A bare prefix beside a ",[747,1382,1383],{},"[slug]"," page goes to the locale home, so a CMS slug equal to a locale code in another case loses its page. Set ",[766,1386,1387],{"href":190},[747,1388,1389],{},"prefixCaseRedirect: false"," to answer 404 instead; ",[747,1392,1393],{},"redirects: false"," does the same. With ",[747,1396,1397],{},"ssr: false"," the client makes the same redirect.",[806,1400,1401,1351,1404,1407,1408,1363,1410,768],{},[757,1402,1403],{},"A page path in another case redirects to its own spelling.",[747,1405,1406],{},"\u002FT\u002FBASIC"," was a 200 and is now a ",[747,1409,1362],{},[747,1411,1412],{},"\u002Ft\u002Fbasic",[806,1414,1415,881,1418,1017,1421,780,1424,1427,1428,1431,1432,1435,1436,1439],{},[757,1416,1417],{},"An unknown URL stays a 404.",[747,1419,1420],{},"autoDetectPath: '*'",[747,1422,1423],{},"'no_prefix'",[747,1425,1426],{},"\u002Fnope"," no longer redirects to ",[747,1429,1430],{},"\u002Fde\u002Fnope"," first. ",[747,1433,1434],{},"prefix"," keeps the redirect (nothing is served unprefixed there), as does ",[747,1437,1438],{},"\u002F"," everywhere.",[806,1441,1442,1351,1447,1450,1451,1453,1454,1456,1457,1459,1460,1463,1464,1467,1468,1471],{},[757,1443,1444,1445,768],{},"Another locale's custom path, unprefixed, finds its page under ",[747,1446,1340],{},[747,1448,1449],{},"\u002Fa-propos"," was a 404 and is now a ",[747,1452,1362],{}," to the default locale's URL (",[747,1455,1372],{},"). Under ",[747,1458,1434],{}," the same redirect now reaches a live page (",[747,1461,1462],{},"\u002Fen\u002Fabout",", it was ",[747,1465,1466],{},"\u002Fen\u002Fa-propos",", a 404). ",[747,1469,1470],{},"prefix_and_default"," stays a 404.",[806,1473,1474,1341,1481,1483,1484,1486,1487,1490],{},[757,1475,1476,857,1478,1480],{},[747,1477,1434],{},[747,1479,1393],{}," answers 404 on an unprefixed URL",[747,1482,1372],{}," was a ",[747,1485,1362],{},"), including the original URL of a page with a custom default path. ",[747,1488,1489],{},"$localePath('\u002Fabout')"," still finds that page.",[806,1492,1493,1499,1500,1450,1503,1363,1505,768],{},[757,1494,1495,1496,1498],{},"Under ",[747,1497,1340],{}," the original URL of a page with a custom default path redirects to it,"," dynamic pages included. ",[747,1501,1502],{},"\u002Fdir\u002Fone",[747,1504,1362],{},[747,1506,1507],{},"\u002Fdir-one\u002Fone",[806,1509,1510,1341,1519,1521,1522,1524],{},[757,1511,1512,1514,1515,1518],{},[747,1513,1420],{}," now applies the cookie and ",[747,1516,1517],{},"Accept-Language"," to unprefixed paths too",[747,1520,1372],{}," → ",[747,1523,1366],{},").",[806,1526,1527,1532,1533,780,1536,1538,1539,1542,1543,1545,1546,1549],{},[757,1528,1495,1529,1531],{},[747,1530,1434],{}," an unprefixed URL keeps the visitor's locale."," With cookie ",[747,1534,1535],{},"de",[747,1537,1372],{}," and a plain ",[747,1540,1541],{},"\u003CNuxtLink to=\"\u002Fabout\">"," go to ",[747,1544,1366],{},", on every path, whatever ",[747,1547,1548],{},"autoDetectPath"," says.",[806,1551,1552,1351,1557,857,1560,1563,1564,768],{},[757,1553,1495,1554,1556],{},[747,1555,1470],{}," an unprefixed URL is the default locale.",[747,1558,1559],{},"\u002Fcontact",[747,1561,1562],{},"Accept-Language: de"," used to render German and then hydrate English. It now renders the default locale; visitors reach German through ",[747,1565,1566],{},"\u002Fde\u002F...",[806,1568,1569,1341,1575,1578,1579,1581,1582,768],{},[757,1570,1495,1571,1574],{},[747,1572,1573],{},"no_prefix"," a custom path renders its own locale",[747,1576,1577],{},"\u002Fueber-uns"," is German with any preference), and a restricted page renders in a locale it serves. A path several locales share renders the preference when it is one of them, and under ",[747,1580,884],{}," is a page on each of their domains. Those locales share one record, ",[747,1583,1584],{},"localized-\u003Cpage>-\u003Cfirst locale>",[806,1586,1587,1532,1592,780,1594,1596,1597,1599,1600,1603,1604,768],{},[757,1588,1589,1591],{},[747,1590,1119],{}," goes by the visitor's locale.",[747,1593,1535],{},[747,1595,1372],{}," goes to ",[747,1598,1577],{},", and renders German, not to the default locale's ",[747,1601,1602],{},"\u002Fabout-us",". A locale with no custom path of its own stays on ",[747,1605,1372],{},[806,1607,1608,1351,1615,1618],{},[757,1609,1610,1611,1614],{},"A ",[747,1612,1613],{},"routeRules"," redirect without a page is not localized.",[747,1616,1617],{},"\u002Fde\u002Fold"," was an empty 200, now it is a 404: add a rule for the prefixed path if you need one. A link from another locale to such a rule keeps the path as written and lands on the rule's target.",[806,1620,1621,1351,1624,1627,1628,1631,1632,1635,1636,1638,1639,1642],{},[757,1622,1623],{},"Route rules reach custom paths.",[747,1625,1626],{},"\u002Fblog\u002F**"," also applies to ",[747,1629,1630],{},"\u002Fde\u002Fartikel\u002F:slug"," when ",[747,1633,1634],{},"blog\u002F[slug]"," has that path, and rules are copied under ",[747,1637,1573],{}," too. A static sibling such as ",[747,1640,1641],{},"\u002Fde\u002Fartikel\u002Fnews"," matches that pattern as well. A rule already written under a locale prefix stays as written.",[806,1644,1645,1652],{},[757,1646,1647,1648,1651],{},"A locale with ",[747,1649,1650],{},"disabled: true"," answers 404 on its prefix"," at once, and links to it stay on the page. A locale disabled at runtime does the same: it used to render in the fallback locale.",[806,1654,1655,1661,1662,1665],{},[757,1656,1657,1658],{},"The module's 404 reads ",[747,1659,1660],{},"Page Not Found"," on the prefix of a disabled locale and on a host's own prefix, where Nuxt said ",[747,1663,1664],{},"Page not found: \u002Fde\u002Fabout",". The status is the same.",[806,1667,1668,1674],{},[757,1669,1670,1673],{},[747,1671,1672],{},"customRegexMatcher"," no longer 404s a real page"," whose first segment looks like a locale.",[806,1676,1677,1680,1681,1683,1684,1687],{},[757,1678,1679],{},"Localized route names are consistent."," A child under a shared locale record keeps the page's name, ",[747,1682,1573],{}," honours ",[747,1685,1686],{},"localizedRouteNamePrefix",", and a parent with an index child stays unnamed.",[806,1689,1690,1341,1696,1699,1700,1703],{},[757,1691,1692,1693],{},"Pages a module adds without a ",[747,1694,1695],{},"name",[747,1697,1698],{},"extendPages",") are localized and get a name, with locale variants and ",[747,1701,1702],{},"hreflang",". They used to stay unlocalized.",[806,1705,1706,1716,1717,780,1720,780,1723,1726],{},[757,1707,1610,1708,1711,1712,1715],{},[747,1709,1710],{},"nuxt.config"," entry beats ",[747,1713,1714],{},"$defineI18nRoute",","," under any key form (",[747,1718,1719],{},"about\u002Fteam",[747,1721,1722],{},"\u002Fabout\u002Fteam",[747,1724,1725],{},"about-team","). Which one won used to depend on the spelling.",[806,1728,1729,1732,1733,1736,1737,1740],{},[757,1730,1731],{},"New build warnings:"," a ",[747,1734,1735],{},"localeRoutes"," value that starts with its own locale code (",[747,1738,1739],{},"fr: '\u002Ffr\u002Farticle'","), and a child's custom path outside its parent.",[806,1742,1743,1748,1749,1751,1752,1017,1754,1756],{},[757,1744,1745,1746,768],{},"Hash mode works under ",[747,1747,1434],{}," The document is ",[747,1750,1438],{},", and ",[747,1753,1333],{},[747,1755,1372],{}," redirect into the hash.",[806,1758,1759,1373,1765,792,1767,1769],{},[757,1760,1761,1764],{},[747,1762,1763],{},"\u002F#\u002Fde\u002Fx"," renders German",[747,1766,1340],{},[747,1768,1470],{},". It rendered English with a hydration mismatch.",[798,1771,1773],{"id":1772},"links-and-route-objects","Links and route objects",[833,1775,1776,1787,1801,1848,1862,1904,1922,1946,1974,2006,2021],{},[806,1777,1778,1351,1781,780,1783,1786],{},[757,1779,1780],{},"A locale that does not serve a page links to its home.",[747,1782,931],{},[747,1784,1785],{},"$switchLocalePath"," and the switcher no longer return another locale's page.",[806,1788,1789,1351,1792,792,1795,1797,1798,768],{},[757,1790,1791],{},"An unknown locale code goes to the default locale.",[747,1793,1794],{},"$localePath(path, 'xx')",[747,1796,931],{}," used to give ",[747,1799,1800],{},"\u002Fxx",[806,1802,1803,1827,1828,1831,1832,1835,1836,1839,1840,1843,1844,1847],{},[757,1804,1805,1807,1808,780,1811,1017,1814,1817,1818,792,1821,949,1824,1826],{},[747,1806,783],{}," returns a string with an ",[747,1809,1810],{},"http(s):",[747,1812,1813],{},"mailto:",[747,1815,1816],{},"tel:"," scheme as is, and the ",[747,1819,1820],{},"path",[747,1822,1823],{},"fullPath",[747,1825,931],{}," carry it unchanged",", so do not pass an unchecked value (a ",[747,1829,1830],{},"?next="," parameter) to them as a link target. ",[747,1833,1834],{},"\u002F\u002Fhost"," and bare names like ",[747,1837,1838],{},"x.com"," stay paths, on this origin in every locale, and no link they turn into leaves it: ",[747,1841,1842],{},"\u002Fde\u002F\u002Fx.com"," to the default locale is ",[747,1845,1846],{},"\u002Fx.com",". Backslashes count as slashes.",[806,1849,1850,1351,1855,1858,1859,768],{},[757,1851,1852,1854],{},[747,1853,783],{}," encodes a path:",[747,1856,1857],{},"\u002Fa b"," gives ",[747,1860,1861],{},"\u002Fa%20b",[806,1863,1864,1871,1872,780,1874,780,1877,1880,1881,1341,1884,1886,1887,1890,1891,1017,1893,1895,1896,1898,1899,1017,1901,1903],{},[757,1865,1866,792,1868,1870],{},[747,1867,931],{},[747,1869,975],{}," return plain objects,"," safe in ",[747,1873,1233],{},[747,1875,1876],{},"reactive",[747,1878,1879],{},"useState",", JSON and spreads. When a param needs escaping the object is ",[747,1882,1883],{},"{ path, fullPath, query, hash }",[747,1885,931],{}," adds ",[747,1888,1889],{},"href","), with no ",[747,1892,1695],{},[747,1894,1218],{},", and the URL stays the same before and after a reload. A plain URL has both. ",[747,1897,1695],{}," is new: the old objects never had it. Code reading ",[747,1900,1056],{},[747,1902,1059],{}," must handle their absence, and which form you get depends on the value.",[806,1905,1906,1914,1915,1917,1918,1921],{},[757,1907,1495,1908,780,1911,1913],{},[747,1909,1910],{},"trailingSlash",[747,1912,975],{}," always returns that path form,"," plain slugs too, and server redirects follow ",[747,1916,1910],{},". Results and ",[747,1919,1920],{},"Location"," headers can change under that option.",[806,1923,1924,1351,1930,1932,1933,1341,1936,1463,1939,1942,1943,1945],{},[757,1925,1926,1927,1929],{},"Query values in ",[747,1928,931],{}," output use vue-router's encoding:",[747,1931,1438],{}," stays literal and a space is ",[747,1934,1935],{},"+",[747,1937,1938],{},"?redirect=\u002Fv2",[747,1940,1941],{},"%2Fv2","). The decoded value is the same, but a snapshot of such an ",[747,1944,1889],{}," changes.",[806,1947,1948,1351,1951,780,1954,780,1957,792,1960,1963,1964,1967,1968,1971,1972,768],{},[757,1949,1950],{},"A link with no path stays on the current page.",[747,1952,1953],{},"$localePath('#top')",[747,1955,1956],{},"'?p=2'",[747,1958,1959],{},"''",[747,1961,1962],{},"{ query }"," keep the page they are on; ",[747,1965,1966],{},"'#top'"," used to read from the site root. A bare ",[747,1969,1970],{},"'about'"," still means ",[747,1973,1372],{},[806,1975,1976,1351,1979,792,1982,1985,1986,1989,1990,1992,1993,780,1995,792,1997,815,1999,2002,2003,768],{},[757,1977,1978],{},"Spreads.",[747,1980,1981],{},"{ ...route, query }",[747,1983,1984],{},"{ ...route, hash }"," keep the change, also through ",[747,1987,1988],{},"$switchRoute",". A new ",[747,1991,1820],{}," wins in ",[747,1994,931],{},[747,1996,783],{},[747,1998,1988],{},[747,2000,2001],{},"{ ...route, params }"," works on a named route; on a path-form route the path wins and the params are ignored, with vue-router's dev warning. Use ",[747,2004,2005],{},"$localeRoute({ name, params })",[806,2007,2008,2013,2014,780,2016,792,2018,2020],{},[757,2009,2010,2012],{},[747,2011,1988],{}," stays in the app."," A locale's own ",[747,2015,884],{},[747,2017,1813],{},[747,2019,1816],{}," leave it; any other string is a path.",[806,2022,2023,2028,2029,2032,2033,2036,2037,2032,2040,2043,2044,2047,2048,2050,2051,2053,2054,768],{},[757,2024,2025],{},[747,2026,2027],{},"excludePatterns"," match whole segments (",[747,2030,2031],{},"'\u002Fadmin'"," no longer matches ",[747,2034,2035],{},"\u002Fadministrator","), and globs are anchored (",[747,2038,2039],{},"\u002Fdocs\u002F*",[747,2041,2042],{},"\u002Fen\u002Fdocs\u002Fx","). ",[747,2045,2046],{},"RegExp"," patterns now reach the runtime; they used to be lost there. A page they match is unlocalized: no ",[747,2049,1702],{},", and the default locale under ",[747,2052,1340],{},". Check your patterns against ",[766,2055,72],{"href":73},[743,2057,1610,2058,1017,2061,2063],{},[747,2059,2060],{},"%",[747,2062,763],{}," in a param does not survive a server-rendered reload on Nuxt 4.5.2, on any app: that is upstream, not the module.",[798,2065,1099],{"id":2066},"locale-domains",[833,2068,2069,2104,2130,2149,2188,2199,2217,2234,2251],{},[806,2070,2071,2077,2078,899,2081,2083,2084,1212,2086,2089,2090,2093,2094,2096,2097,2100,2101,2103],{},[757,2072,2073,2076],{},[747,2074,2075],{},"locales[].baseUrl"," now routes requests."," One build serves every domain: see ",[766,2079,83],{"href":2080},"\u002Fguide\u002Flayers#multiple-domains",[747,2082,884],{}," set, a locale of another domain is a 404 on this host (",[747,2085,1462],{},[747,2087,2088],{},"example.de","), and links to a locale on the same host are relative. Requests on any other host, ",[747,2091,2092],{},"localhost"," included, behave as before, except that canonical and ",[747,2095,1702],{}," use ",[747,2098,2099],{},"metaBaseUrl"," if set, else the default locale's ",[747,2102,884],{},", and not the request's origin.",[806,2105,2106,2112,2113,2119,2120,2123,2124,2127,2128,768],{},[757,2107,2108,2109,1715],{},"Behind a proxy that rewrites ",[747,2110,2111],{},"Host"," every request falls to the build config until you set ",[766,2114,2116],{"href":2115},"\u002Fapi\u002Fmodule-options#trustforwardedhost",[747,2117,2118],{},"trustForwardedHost",". It defaults to ",[747,2121,2122],{},"false",", unlike ",[747,2125,2126],{},"metaTrustForwardedHost",". See ",[766,2129,889],{"href":888},[806,2131,2132,2144,2145,768],{},[757,2133,2134,857,2137,2139,2140,2143],{},[747,2135,2136],{},"nuxi generate",[747,2138,884],{}," needs ",[747,2141,2142],{},"NUXT_I18N_DOMAIN",", once per domain."," Without it the build warns, and those locales are links with no pages. See ",[766,2146,2148],{"href":2147},"\u002Fguide\u002Fdeployment#static-site-nuxi-generate","Static site",[806,2150,2151,1351,2161,792,2164,2167,2168,792,2171,2174,2175,2178,2179,2181,2182,2184,2185,768],{},[757,2152,2153,2154,2156,2157,1017,2159,768],{},"A link to a locale with a ",[747,2155,884],{}," goes through ",[747,2158,783],{},[747,2160,308],{},[747,2162,2163],{},"\u003CNuxtLink :to=\"$localePath(x, 'fr')\">",[747,2165,2166],{},"\u003Ci18n-link :to=\"$localeRoute(x, 'fr')\">"," are that absolute URL, and a click goes there. The router takes no absolute object: ",[747,2169,2170],{},"\u003CNuxtLink :to=\"$localeRoute(x, 'fr')\">",[747,2172,2173],{},"router.push($localeRoute(x, 'fr'))"," stay ",[747,2176,2177],{},"\u002Fhttps:\u002F\u002Ffr.example.com\u002F...",", a path of this app. On ",[747,2180,2092],{}," or a preview host every locale with a ",[747,2183,884],{}," is such a link, the current one too. In code use ",[747,2186,2187],{},"navigateTo($localePath(x, 'fr'), { external: true })",[806,2189,2190,1341,2193,2196,2197,768],{},[757,2191,2192],{},"The home of a domain is written without a trailing slash everywhere",[747,2194,2195],{},"https:\u002F\u002Fexample.de","), in links, canonical and ",[747,2198,1702],{},[806,2200,2201,1351,2209,2212,2213,2216],{},[757,2202,1495,2203,2205,2206,768],{},[747,2204,1434],{},", a link to another domain keeps the locale prefix, with or without ",[747,2207,2208],{},"baseDefault",[747,2210,2211],{},"https:\u002F\u002Fexample.de\u002Fde\u002Fabout",", not ",[747,2214,2215],{},"https:\u002F\u002Fexample.de\u002Fabout",", which only redirects.",[806,2218,2219,2226,2227,2229,2230,2233],{},[757,2220,1495,2221,857,2223,2225],{},[747,2222,1340],{},[747,2224,2208],{}," on a locale other than the build default, routes keep every prefix"," so other domains can link to them. ",[747,2228,1333],{}," is still a 404. Only code reading ",[747,2231,2232],{},"router.getRoutes()"," sees the difference.",[806,2235,2236,1351,2244,2247,2248,2250],{},[757,2237,1495,2238,2240,2241,2243],{},[747,2239,1340],{}," a host's own prefix is a 404 on its ",[747,2242,2208],{}," host.",[747,2245,2246],{},"\u002Fde\u002Fx"," on the ",[747,2249,1535],{}," host was a 200.",[806,2252,2253,1351,2259,2262,2263,2266],{},[757,2254,2255,2258],{},[747,2256,2257],{},"$getI18nConfig().locales"," holds only what the host serves.",[747,2260,2261],{},"linkLocales"," holds all of them, and ",[747,2264,2265],{},"$getLocales()"," stays complete.",[798,2268,2270,2271],{"id":2269},"navigation-and-switchlocale","Navigation and ",[747,2272,786],{},[833,2274,2275,2293,2299,2323,2340,2353,2368,2398,2421,2437,2464,2473],{},[806,2276,2277,2280,2281,2284,2285,2288,2289,2292],{},[757,2278,2279],{},"A navigation applies when it commits."," The dictionary, the locale, params and head change in ",[747,2282,2283],{},"router.afterEach",", so a cancelled or blocked navigation changes nothing, and the old page's links stay valid while the next chunk loads. A ",[747,2286,2287],{},"beforeResolve",", a ",[747,2290,2291],{},"beforeRouteEnter"," or a later global guard now sees the old dictionary and locale. Route middleware is unaffected.",[806,2294,2295,2298],{},[757,2296,2297],{},"A failed chunk keeps the current dictionary."," A 5xx, a network error or a bad body on the root file used to show raw keys. The new page now renders with the old strings, and the next navigation retries. A 404, or a static host's SPA shell in the file's place, gives the root dictionary until the next reload.",[806,2300,2301,2311,2312,2314,2315,1751,2318,1351,2320,768],{},[757,2302,2303,2305,2306,1017,2309],{},[747,2304,786],{}," resolves ",[747,2307,2308],{},"true",[747,2310,2122],{}," (it resolved nothing), ",[747,2313,2122],{}," when the locale's dictionary did not apply. It is typed ",[747,2316,2317],{},"Promise\u003Cboolean>",[747,2319,1988],{},[747,2321,2322],{},"Promise\u003Cvoid>",[806,2324,2325,2330,2331,2333,2334,2336,2337,2339],{},[757,2326,2327,2329],{},[747,2328,786],{}," is an explicit choice."," On arrival it stores the locale, on a 404 too. If the navigation is blocked, cancelled or throws, the stored preference and the state stay as they were, and a throw is rethrown. A move to another host stores it first. Under ",[747,2332,1573],{}," and in hash mode the switch stands whatever the navigation does. On a page with one URL for every locale (",[747,2335,2027],{},") the choice is not undone, and the next page's URL decides: under ",[747,2338,1340],{}," an unprefixed link returns to the default locale.",[806,2341,2342,2349,2350,2352],{},[757,2343,1495,2344,780,2346,2348],{},[747,2345,1573],{},[747,2347,786],{}," keeps its page when two pages share a custom path,"," with escaped params too. A reload of such a URL, and a ",[747,2351,931],{}," with an escaped param, land on the first record.",[806,2354,2355,2358,2359,1373,2361,2363,2364,2367],{},[757,2356,2357],{},"A client redirect keeps the mode of its navigation."," A plain ",[747,2360,1541],{},[747,2362,1434],{}," adds a history entry instead of overwriting the current one; ",[747,2365,2366],{},"router.replace"," still replaces.",[806,2369,2370,2378,2379,2382,2383,2386,2387,2390,2391,1363,2394,2397],{},[757,2371,2372,792,2375,2377],{},[747,2373,2374],{},"$setI18nRouteParams",[747,2376,291],{}," from the server survive hydration."," After landing on ",[747,2380,2381],{},"\u002Fnews\u002F2"," the switcher links to the translated slug (",[747,2384,2385],{},"\u002Fde\u002Fnews\u002F2-zwei","), not ",[747,2388,2389],{},"\u002Fde\u002Fnews\u002F2",", in the server HTML too, wherever the switcher sits, when the page sets the params during SSR. They are dropped when a navigation to another path commits, including ",[747,2392,2393],{},"\u002Fnews\u002F1",[747,2395,2396],{},"\u002Fnews\u002F4",": set them again on the new page.",[806,2399,2400,2405,2406,2409,2410,2413,2414,2416,2417,2420],{},[757,2401,2402,2404],{},[747,2403,2374],{}," read in setup is bound to that page."," A late call from a page already left does nothing. ",[747,2407,2408],{},"useNuxtApp().$setI18nRouteParams"," is an accessor now, and two reads give two functions. It has no setter: ",[747,2411,2412],{},"useI18n().$setI18nRouteParams = fn",", as a test stub might do, throws in strict mode, so stub ",[747,2415,283],{}," itself. In a layout or ",[747,2418,2419],{},"app.vue"," it is the plain function, as nothing there is left.",[806,2422,2423,2429,2430,2432,2433,2436],{},[757,2424,2425,2426,2428],{},"The server rewrites the links of ",[747,2427,312],{}," when the render ends",", on pages with params, because a switcher in the layout renders before the page's async setup. A hand-written ",[747,2431,1785],{}," link is not rewritten: see ",[766,2434,2435],{"href":63},"custom locale routes",". Under Nuxt's SSR streaming the first HTML keeps the URL's params.",[806,2438,2439,2446,2447,2450,2451,780,2454,792,2456,2459,2460,2463],{},[757,2440,2441,2442,2445],{},"A prop named ",[747,2443,2444],{},"locale"," on a server component sets its render locale",", so ",[747,2448,2449],{},"\u003CGreeting :locale=\"$getLocale()\" \u002F>"," follows the URL and a switch. ",[747,2452,2453],{},"$getLocale()",[747,2455,783],{},[747,2457,2458],{},"$getLocaleName"," inside it follow the prop too. See ",[766,2461,2462],{"href":47},"server-side translations",". Without the prop it still uses the cookie or the default.",[806,2465,2466,2472],{},[757,2467,2468,2471],{},[747,2469,2470],{},"keepalive"," pages get their params and head back"," on return.",[806,2474,2475,1351,2483,857,2486,2489,2490,768],{},[757,2476,2477,2478,1373,2480,2482],{},"A nested page set to ",[747,2479,2122],{},[747,2481,1340],{}," has no locale URL.",[747,2484,2485],{},"\u002Fde\u002Fparent\u002Fkid",[747,2487,2488],{},"globalLocaleRoutes: { 'parent-kid': false }"," was served and is now a 404: the page stays on ",[747,2491,2492],{},"\u002Fparent\u002Fkid",[798,2494,2496],{"id":2495},"locale-detection-and-the-cookie","Locale detection and the cookie",[743,2498,2499,2500,768],{},"One precedence everywhere, described on ",[766,2501,57],{"href":58},[833,2503,2504,2529,2553,2575,2584,2614,2628,2634,2649,2672],{},[806,2505,2506,2514,2515,2518,2519,815,2522,2525,2526,768],{},[757,2507,2508,2511,2512,768],{},[747,2509,2510],{},"?locale="," counts on pages only under ",[747,2513,1573],{}," Under the prefix strategies the URL decides; ",[747,2516,2517],{},"\u002Fabout?locale=de"," no longer renders German under ",[747,2520,2521],{},"lang=\"en\"",[747,2523,2524],{},"?locale=de&locale=fr"," reads the first value, it was ",[747,2527,2528],{},"\"de,fr\"",[806,2530,2531,1341,2539,1521,2542,2544,2545,2548,2549,2552],{},[757,2532,2533,1683,2535,2538],{},[747,2534,1517],{},[747,2536,2537],{},"q"," values",[747,2540,2541],{},"fr;q=0.1, de;q=0.9",[747,2543,1535],{},"; ",[747,2546,2547],{},"q=0"," excludes a language). Regional matching no longer depends on the order of ",[747,2550,2551],{},"locales",", and never crosses Chinese scripts.",[806,2554,2555,881,2558,2561,2562,2564,2565,2568,2569,2571,2572,2574],{},[757,2556,2557],{},"A client navigation to a page stores its locale in the cookie, also on an unprefixed page of the default locale.",[747,2559,2560],{},"localeCookie"," set, a visitor who clicks a link to ",[747,2563,1372],{}," now has ",[747,2566,2567],{},"user-locale=en",", and a later change of browser language no longer redirects ",[747,2570,1438],{},". A first load of that URL stores nothing. Under ",[747,2573,1573],{}," and in hash mode a navigation stores only a change.",[806,2576,2577,2580,2581,2583],{},[757,2578,2579],{},"A 404 writes no cookie:"," not the response, and not a plain client navigation to it, in any mode. Under ",[747,2582,1573],{}," a URL that looks prefixed writes none either.",[806,2585,2586,2595,2596,2599,2600,2603,2604,2606,2607,1080,2610,2613],{},[757,2587,1495,2588,2590,2591,2594],{},[747,2589,1573],{}," an explicit ",[747,2592,2593],{},"localeCookie: null"," is honoured."," It used to become ",[747,2597,2598],{},"user-locale",". Set it in the ",[747,2601,2602],{},"i18n"," block of ",[747,2605,1710],{},": a ",[747,2608,2609],{},"null",[747,2611,2612],{},"modules: [[name, opts]]"," or in a layer is still lost.",[806,2615,2616,2623,2624,2627],{},[757,2617,2618,2619,2622],{},"Hash mode reads only the ",[747,2620,2621],{},"hash-locale"," cookie."," A lone ",[747,2625,2626],{},"user-locale=de"," no longer counts.",[806,2629,2630,2633],{},[757,2631,2632],{},"A malformed locale cookie is ignored and stays as it is,"," instead of failing every SSR page with a 500. It is no longer deleted on every request, which also stopped a prefixed page from storing its locale.",[806,2635,2636,2639,2640,1212,2643,2645,2646,2648],{},[757,2637,2638],{},"The URL's locale goes first."," A plugin's ",[747,2641,2642],{},"setLocale('de')",[747,2644,1336],{}," no longer loads the ",[747,2647,1535],{}," dictionary, and an unknown code in the state is ignored.",[806,2650,2651,1341,2654,780,2656,2658,2659,1521,2662,2665,2666,792,2668,2671],{},[757,2652,2653],{},"Server API helpers",[747,2655,1141],{},[747,2657,1144],{},") use one order on every route: ",[747,2660,2661],{},"?locale",[747,2663,2664],{},"[locale]"," param or prefix → cookie → header → default. They now respect ",[747,2667,2593],{},[747,2669,2670],{},"autoDetectLanguage: false",", and cache a dictionary per locale.",[806,2673,2674,1351,2677,2680,2681,2684,2685,2687,2688,792,2690,2692,2693,2696,2697,2700,2701,768],{},[757,2675,2676],{},"Runtime overrides reach routing.",[747,2678,2679],{},"NUXT_I18N_DEFAULT_LOCALE"," and runtime ",[747,2682,2683],{},"disabledLocales"," now change the generated strategy (a disabled locale stops routing), and runtime ",[747,2686,2683],{}," add to the build's. Under ",[747,2689,1340],{},[747,2691,1470],{}," a runtime ",[747,2694,2695],{},"defaultLocale"," is ignored with a warning, because that locale's unprefixed routes are generated at build. A runtime ",[747,2698,2699],{},"fallbackLocale"," must be an enabled locale: otherwise it is dropped with a warning and the build's value applies if that one is enabled. See ",[766,2702,41],{"href":42},[798,2704,911],{"id":2705},"seo-and-head-tags",[833,2707,2708,2743,2758,2769,2779,2797,2824,2864,2885,2912,2925],{},[806,2709,2710,2716,2717,2720,2721,2723,2724,2727,2728,780,2730,792,2732,2734,2735,2738,2739,768],{},[757,2711,2712,2715],{},[747,2713,2714],{},"dir=\"auto\""," is no longer the default."," A locale without ",[747,2718,2719],{},"dir"," used to get ",[747,2722,2714],{},", which slows parsing of large pages. Now a known RTL language gets ",[747,2725,2726],{},"dir=\"rtl\"",", and any other locale gets no attribute. This applies to Nuxt, ",[747,2729,688],{},[747,2731,210],{},[747,2733,270],{},". If you set ",[747,2736,2737],{},"dir: 'auto'"," on a locale to keep the old output, it costs about 1 s of parsing at 20,000 elements: see ",[766,2740,2742],{"href":2741},"\u002Fguide\u002Fseo#text-direction","Text direction",[806,2744,2745,1351,2748,2751,2752,2754,2755,2757],{},[757,2746,2747],{},"Every SSR page has a new tag:",[747,2749,2750],{},"\u003Clink rel=\"preload\" as=\"fetch\" crossorigin=\"anonymous\" href=\"\u002F_locales\u002F...\">",", 404 pages too. With ",[747,2753,902],{}," the ",[747,2756,1889],{}," is on that host, which needs CORS. A strict CSP must allow it.",[806,2759,2760,2544,2765,2768],{},[757,2761,2762,2764],{},[747,2763,1702],{}," lists only the locales that serve the page",[747,2766,2767],{},"x-default"," is emitted only when the default locale serves it.",[806,2770,2771],{},[757,2772,2773,2774,1017,2776,768],{},"An unlocalized page has no ",[747,2775,1702],{},[747,2777,2778],{},"og:locale:alternate",[806,2780,2781,2790,2791,792,2793,2796],{},[757,2782,2783,2784,2786,2787],{},"Canonical and ",[747,2785,1702],{}," include ",[747,2788,2789],{},"app.baseURL"," when the origin comes from the request. ",[747,2792,2099],{},[747,2794,2795],{},"site.url"," stay as written.",[806,2798,2799,2805,2806,780,2808,780,2811,2814,2815,2817,2818,1351,2820,2823],{},[757,2800,2801,2802],{},"404 pages carry ",[747,2803,2804],{},"\u003Chtml lang dir>",", in the locale of the URL. They have no canonical, ",[747,2807,1702],{},[747,2809,2810],{},"og:url",[747,2812,2813],{},"og:locale"," or alternates, also when the module itself answers the 404 on a matched record (",[747,2816,1336],{},"). Tags you pass through ",[747,2819,291],{},[747,2821,2822],{},"replace"," stay, so skip them on error pages.",[806,2825,2826,1341,2834,2837,2838,780,2841,780,2844,780,2847,780,2850,780,2852,792,2854,2857,2858,768],{},[757,2827,2828,2829,792,2831,2833],{},"Canonical, ",[747,2830,2810],{},[747,2832,1702],{}," keep a whitelisted query",[747,2835,2836],{},"\u002Fabout?page=2","), on the server too: it was dropped during SSR. ",[747,2839,2840],{},"page",[747,2842,2843],{},"sort",[747,2845,2846],{},"filter",[747,2848,2849],{},"search",[747,2851,2537],{},[747,2853,1297],{},[747,2855,2856],{},"tag"," are whitelisted by default; see ",[766,2859,2861],{"href":2860},"\u002Fapi\u002Fmodule-options#canonicalquerywhitelist",[747,2862,2863],{},"canonicalQueryWhitelist",[806,2865,2866,2873,2874,1017,2876,2878,2879,2881,2882,2884],{},[757,2867,2868,2869,2872],{},"An ",[747,2870,2871],{},"X-Forwarded-Host"," that does not parse is ignored"," instead of a 500 on every page. With no usable host, and no ",[747,2875,2099],{},[747,2877,2795],{},", canonical and ",[747,2880,1702],{}," URLs on that response are relative. A ",[747,2883,2111],{}," that does not parse stays a 500, as on a plain Nuxt app.",[806,2886,2887,1080,2893,792,2895,2897,2898,2900,2901,2903,2904,815,2906,792,2909,2911],{},[757,2888,2889,2892],{},[747,2890,2891],{},"disableMeta"," now works,",[747,2894,1714],{},[747,2896,1125],{}," alike, also when set in ",[747,2899,1710],{},": the page has no ",[747,2902,1702],{},", canonical or ",[747,2905,2813],{},[747,2907,2908],{},"lang",[747,2910,2719],{}," stay.",[806,2913,2914,2917,2918,2921,2922,768],{},[747,2915,2916],{},"useLocaleHead()"," also returns ",[747,2919,2920],{},"build()",", a getter for ",[747,2923,2924],{},"useHead(() => build())",[806,2926,2927,2928,780,2930,2932,2933,2935,2936,768],{},"On a plain build without ",[747,2929,2099],{},[747,2931,2871],{}," still chooses the host in these tags, as before. Pin ",[747,2934,2099],{}," if the origin is reachable directly: see ",[766,2937,889],{"href":888},[798,2939,2941],{"id":2940},"translations","Translations",[833,2943,2944,2954,2967,2977,2989,3014,3026,3036,3045,3053,3062,3068],{},[806,2945,2946,2949,2950,2953],{},[757,2947,2948],{},"Merges are deep at every level."," Root, page and fallback files used a 2-level merge, so ",[747,2951,2952],{},"a.b.c"," from a fallback or the root was lost in source mode and in dev. All modes now give the same dictionary.",[806,2955,2956,1341,2959,1521,2962,1521,2964,2966],{},[757,2957,2958],{},"Fallback chains are followed to their end",[747,2960,2961],{},"fr",[747,2963,1535],{},[747,2965,1344],{},") in every mode.",[806,2968,2969,2972,2973,768],{},[757,2970,2971],{},"Merging goes by locale, not by file kind."," The active locale's root file now beats a fallback locale's page file. See ",[766,2974,2976],{"href":2975},"\u002Fguide\u002Ftranslations#fallback-locales","Fallback locales",[806,2978,2979,2985,2986,2988],{},[757,2980,2981,2982,2984],{},"A project's ",[747,2983,2551],{}," entry beats a layer's"," for the same ",[747,2987,747],{},"; a layer only fills the gaps.",[806,2990,2991,2998,2999,3002,3003,3006,3007,3010,3011,3013],{},[757,2992,2993,2994,2997],{},"A page without its own ",[747,2995,2996],{},"pages\u002F\u003Cname>\u002F"," folder reads the root dictionary,"," child pages too. It used to get ",[747,3000,3001],{},"{}"," and show raw keys. Output gains a file per such page, and ",[747,3004,3005],{},"__root\u002F\u003Clocale>\u002Fdata.json"," per locale: ",[747,3008,3009],{},"\u002F_locales\u002F\u003Cany name>\u002Fen\u002Fdata.json"," is a 200 with the root keys, it was ",[747,3012,3001],{},". That matters for monitoring, for allow-lists on static hosts and for tools that read the tree.",[806,3015,3016,1351,3022,3025],{},[757,3017,3018,3021],{},[747,3019,3020],{},"disablePageLocales: true"," reads the root files only;",[747,3023,3024],{},"pages\u002Findex"," is no longer merged in.",[806,3027,3028,3031,3032,3035],{},[757,3029,3030],{},"The leaving page's keys stop resolving when its element leaves the document."," If a layout used keys that only the previous page's file had, move them to the root file. A parent's keys stay while its child is shown, including a parent with an ",[747,3033,3034],{},"index"," child, until the next navigation. Between two children of one parent, a parent's own keys need the child's dictionary or the root one.",[806,3037,3038,3044],{},[757,3039,3040,3043],{},[747,3041,3042],{},"$clearCache()"," reloads the current page's dictionary"," and keeps the old one on screen until the new one lands. A failed reload keeps the old dictionary, a response requested before the clear is discarded, and a page in its leaving transition stays translated.",[806,3046,3047],{},[757,3048,3049,3052],{},[747,3050,3051],{},"$has(key, route)"," honours the route.",[806,3054,3055,3061],{},[757,3056,3057,3060],{},[747,3058,3059],{},"$loadPageTranslations"," on a page not visited yet no longer stops its file from loading."," The file loads on the first visit and your keys stay on top of it. The page used to show raw keys until a reload.",[806,3063,3064,3067],{},[757,3065,3066],{},"Translation HMR applies edits in place",", without a page reload; removed keys disappear and root edits reach every page.",[806,3069,3070,3073],{},[757,3071,3072],{},"A broken locale file warns once with its path, in every mode."," Dev used to throw and premerged skipped it silently, so an app that relied on dev failing hard no longer sees that.",[798,3075,3077],{"id":3076},"plurals-and-formatting","Plurals and formatting",[833,3079,3080,3090,3113,3158,3168,3187,3209,3220,3532,3553,3580],{},[806,3081,3082,3085,3086,3089],{},[747,3083,3084],{},"$tc"," with a negative, fractional or huge count takes the last form with the real count; ",[747,3087,3088],{},"{ count: null }"," no longer throws; a missing plural key reaches the missing handler.",[806,3091,3092,3095,3096,1107,3099,857,3102,3105,3106,3109,3110,768],{},[747,3093,3094],{},"$tdr"," gives real future dates (",[747,3097,3098],{},"in 3 days",[747,3100,3101],{},"tomorrow",[747,3103,3104],{},"numeric: 'auto'",") and ",[747,3107,3108],{},"Invalid Date"," for an invalid input. Under a second in the past is ",[747,3111,3112],{},"0 seconds ago",[806,3114,3115,3129,3130,3133,3134,3137,3138,3141,3142,2446,3145,3148,3149,3152,3153,3155,3156,768],{},[757,3116,3117,780,3120,792,3123,3125,3126],{},[747,3118,3119],{},"$tn",[747,3121,3122],{},"$td",[747,3124,3094],{}," go by ",[747,3127,3128],{},"iso",", as plurals do: ",[747,3131,3132],{},"{ code: 'en', iso: 'en-GB' }"," now formats dates as ",[747,3135,3136],{},"31\u002F10\u002F2026",". In a locale code ",[747,3139,3140],{},"_"," reads as ",[747,3143,3144],{},"-",[747,3146,3147],{},"en_US"," no longer throws, and a code ",[747,3150,3151],{},"Intl"," does not know formats as ",[747,3154,1344],{}," rather than following the machine's locale. Named formats are still looked up by ",[747,3157,747],{},[806,3159,1610,3160,3163,3164,3167],{},[747,3161,3162],{},"{param}"," placeholder reads only the params you pass (",[747,3165,3166],{},"{constructor}"," stays as written).",[806,3169,3170,3173,3174,780,3177,792,3180,3183,3184,3186],{},[747,3171,3172],{},"{placeholder}"," names may hold any character but braces and spaces: ",[747,3175,3176],{},"{firstName}",[747,3178,3179],{},"{first-name}",[747,3181,3182],{},"{user.name}"," are read from ",[747,3185,1218],{},". Without such a param they stay as written, as before.",[806,3188,1610,3189,3192,3193,792,3195,3197,3198,1858,3201,3204,3205,3208],{},[747,3190,3191],{},"defaultValue"," is interpolated, in ",[747,3194,779],{},[747,3196,3084],{},": ",[747,3199,3200],{},"$t('missing', { n: 1 }, 'Got {n}')",[747,3202,3203],{},"Got 1",", it used to give ",[747,3206,3207],{},"Got {n}",". A default that is not a string comes back as it is.",[806,3210,3211,3213,3214,3216,3217,3219],{},[747,3212,3084],{}," on an empty translation answers ",[747,3215,1959],{},", as ",[747,3218,779],{}," does. It used to answer the default value or the key.",[806,3221,3222,3225,3226,3229,3230,3197,3237,768,3240,3481,3484,3485,780,3488,780,3490,780,3493,780,3496,780,3499,780,3502,780,3505,780,3508,780,3511,780,3514,780,3517,780,3520,3523,3524,780,3526,792,3528,3531],{},[757,3223,3224],{},"Plural templates keep their meaning, with one exception."," The table lists every shape. To get ",[747,3227,3228],{},"Intl.PluralRules"," categories, say so with the new ",[766,3231,3233,3236],{"href":3232},"\u002Fapi\u002Fmethods#tc",[747,3234,3235],{},"=0 "," marker",[747,3238,3239],{},"=0 no apples | one apple | {count} apples",[978,3241,3242,3262],{},[981,3243,3244],{},[984,3245,3246,3249,3256,3259],{},[987,3247,3248],{},"Shape",[987,3250,3251,3252,3255],{},"Example (in ",[747,3253,3254],{},"uk",")",[987,3257,3258],{},"Before",[987,3260,3261],{},"Now",[994,3263,3264,3295,3319,3335,3351,3370,3389,3422,3440],{},[984,3265,3266,3282,3287,3290],{},[999,3267,3268,3269,780,3271,780,3273,780,3275,780,3278,3281],{},"Any template in a locale with one or two integer categories (",[747,3270,1344],{},[747,3272,1535],{},[747,3274,2961],{},[747,3276,3277],{},"es",[747,3279,3280],{},"ja","...)",[999,3283,3284],{},[747,3285,3286],{},"none | one | {count} many",[999,3288,3289],{},"by index",[999,3291,3292],{},[757,3293,3294],{},"unchanged",[984,3296,3297,3300,3305,3311],{},[999,3298,3299],{},"One form per category",[999,3301,3302],{},[747,3303,3304],{},"one | few | many",[999,3306,3307,3308],{},"by index: 21 → ",[747,3309,3310],{},"many",[999,3312,3313,3315,3316],{},[757,3314,3294],{},". Add the marker for 21 → ",[747,3317,3318],{},"one",[984,3320,3321,3324,3329,3331],{},[999,3322,3323],{},"Zero form first, three forms",[999,3325,3326],{},[747,3327,3328],{},"none | one | many",[999,3330,3289],{},[999,3332,3333],{},[757,3334,3294],{},[984,3336,3337,3340,3345,3347],{},[999,3338,3339],{},"Other placeholders",[999,3341,3342],{},[747,3343,3344],{},"no items | {n} item | {n} items",[999,3346,3289],{},[999,3348,3349],{},[757,3350,3294],{},[984,3352,3353,3359,3364,3366],{},[999,3354,3355,3358],{},[747,3356,3357],{},"{count}"," in every form",[999,3360,3361],{},[747,3362,3363],{},"{count} many | {count} one | {count} few",[999,3365,3289],{},[999,3367,3368],{},[757,3369,3294],{},[984,3371,3372,3375,3383,3385],{},[999,3373,3374],{},"Fewer or more forms than below",[999,3376,3377,780,3380],{},[747,3378,3379],{},"a | b",[747,3381,3382],{},"none | one | two | {count} many",[999,3384,3289],{},[999,3386,3387],{},[757,3388,3294],{},[984,3390,3391,3412,3416,3418],{},[999,3392,3393,3394,780,3397,780,3400,780,3403,780,3406,780,3409],{},"In ",[747,3395,3396],{},"lv",[747,3398,3399],{},"prg",[747,3401,3402],{},"blo",[747,3404,3405],{},"cv",[747,3407,3408],{},"ksh",[747,3410,3411],{},"lag",[999,3413,3414],{},[747,3415,3286],{},[999,3417,3289],{},[999,3419,3420],{},[757,3421,3294],{},[984,3423,3424,3429,3434,3437],{},[999,3425,3426,3427],{},"Marked with ",[747,3428,3235],{},[999,3430,3431],{},[747,3432,3433],{},"=0 none | one | many",[999,3435,3436],{},"the marker was shown as text",[999,3438,3439],{},"zero form, then categories",[984,3441,3442,3450,3455,3465],{},[999,3443,3444],{},[757,3445,3446,3447,3449],{},"A zero form with no placeholder, then one form per category, with ",[747,3448,3357],{}," in each form several counts share",[999,3451,3452],{},[747,3453,3454],{},"none | {count} one | {count} few | {count} many",[999,3456,3457,3458,3461,3462],{},"by index: 3 → ",[747,3459,3460],{},"3 many",", 21 → ",[747,3463,3464],{},"21 many",[999,3466,3467,3470,3471,3461,3474,3477,3478,3480],{},[757,3468,3469],{},"by category",": 3 → ",[747,3472,3473],{},"3 few",[747,3475,3476],{},"21 one",". 0, 1, 2 and every count that stays in ",[747,3479,3310],{}," give the same result",[3482,3483],"br",{},"The last shape needs three or more categories (",[747,3486,3487],{},"ru",[747,3489,3254],{},[747,3491,3492],{},"pl",[747,3494,3495],{},"cs",[747,3497,3498],{},"sk",[747,3500,3501],{},"hr",[747,3503,3504],{},"sr",[747,3506,3507],{},"lt",[747,3509,3510],{},"ro",[747,3512,3513],{},"sl",[747,3515,3516],{},"he",[747,3518,3519],{},"ar",[747,3521,3522],{},"cy","...). In ",[747,3525,3519],{},[747,3527,3318],{},[747,3529,3530],{},"two"," are single counts, so those two forms need no number.",[806,3533,3534,3540,3541,3544,3545,3197,3547,3550,3551,768],{},[757,3535,3536,3537,3539],{},"A locale code ",[747,3538,3151],{}," does not know gets the index rule",", with or without the marker's categories: ",[747,3542,3543],{},"ua"," no longer follows the machine's locale. Set ",[747,3546,3128],{},[747,3548,3549],{},"{ code: 'ua', iso: 'uk-UA' }"," plurals as Ukrainian, in the module and in ",[747,3552,688],{},[806,3554,3555,3562,3563,3565,3566,3197,3569,3572,3573,3576,3577,3579],{},[757,3556,3557,3558,3561],{},"A custom ",[747,3559,3560],{},"plural"," rule keeps its signature"," and still gets the locale code. It reads the raw value, so a marked template reaches it with ",[747,3564,3235],{}," in place, and it gets the count as a ",[747,3567,3568],{},"Number",[747,3570,3571],{},"1.5"," where it used to get ",[747,3574,3575],{},"1",". Returning ",[747,3578,2609],{}," falls back to the built-in rule, which honours the marker.",[806,3581,3582,3588,3589,3592,3593,3596],{},[757,3583,3584,3587],{},[747,3585,3586],{},"timeZone"," option."," Set it (",[747,3590,3591],{},"Europe\u002FBerlin",") to render one calendar date on the server and in every browser. It has no effect on ",[747,3594,3595],{},"relativeDate",", which depends on the clock.",[798,3598,3599],{"id":697},[747,3600,304],{},[743,3602,3603,3604,3606,3607,1080,3610,3612,3613,768],{},"This section covers ",[747,3605,304],{}," in the module and ",[747,3608,3609],{},"I18nT",[747,3611,688],{},". For the other frameworks see ",[766,3614,791],{"href":790},[833,3616,3617,3630,3658,3671,3695,3739,3759,3771,3784,3794,3808,3823,3835],{},[806,3618,3619,3627,3628,768],{},[757,3620,3621,3623,3624,3626],{},[747,3622,1211],{}," escapes ",[747,3625,1218],{},", in every case, and ignores all slots."," Only the translation is trusted markup. A param that held markup on purpose now shows as text: put the markup in the translation and pass the data as params, or use slots without ",[747,3629,1211],{},[806,3631,3632,3645,3646,3649,3650,3653,3654,3657],{},[757,3633,3634,3635,780,3637,780,3640,792,3643,1715],{},"Slots work with ",[747,3636,3560],{},[747,3638,3639],{},"number",[747,3641,3642],{},"date",[747,3644,3595],{}," and a ",[747,3647,3648],{},"default"," slot receives ",[747,3651,3652],{},"{ translation }"," in those cases too. Every ",[747,3655,3656],{},"{name}"," is filled, not only the first.",[806,3659,3660,3663,3664,3667,3668,3670],{},[757,3661,3662],{},"A slot beats a param of the same name."," A param value that looks like a placeholder stays text. With a ",[747,3665,3666],{},"customPluralRule"," or a custom ",[747,3669,3560],{}," the rule returns a finished string, so a param it interpolated can be taken for a placeholder there.",[806,3672,3673,3678,3679,780,3681,780,3683,792,3685,815,3687,3690,3691,3694],{},[757,3674,3675,3677],{},[747,3676,2609],{}," means not set"," for ",[747,3680,3560],{},[747,3682,3639],{},[747,3684,3642],{},[747,3686,3595],{},[747,3688,3689],{},":plural=\"null\""," used to fail the render, ",[747,3692,3693],{},":date=\"null\""," rendered 1970.",[806,3696,3697,3699,3700,1087,3702,3197,3704,3706,3707,3709,3710,2544,3712,3715,3716,3719,3720,2544,3723,3715,3726,3729,3730,3732,3733,3735,3736,3738],{},[747,3698,3560],{}," counts like ",[747,3701,3084],{},[747,3703,3568],{},[747,3705,3571],{}," stays ",[747,3708,3571],{}," and takes the last form, it used to be cut to ",[747,3711,3575],{},[747,3713,3714],{},"\"2 items\""," is ",[747,3717,3718],{},"NaN",", it used to be ",[747,3721,3722],{},"2",[747,3724,3725],{},"\"\"",[747,3727,3728],{},"0",". A ",[747,3731,3666],{}," sees ",[747,3734,3571],{}," too. Its other contract is unchanged: same arguments, its answer is used as is, ",[747,3737,2609],{}," renders empty.",[806,3740,3741,3744,3745,780,3747,780,3749,792,3751,3753,3754,3732,3756,768],{},[747,3742,3743],{},"hideIfEmpty"," applies to ",[747,3746,3560],{},[747,3748,3639],{},[747,3750,3642],{},[747,3752,3595],{},". A hidden value renders a comment, not an empty text node, so a test that read ",[747,3755,1959],{},[747,3757,3758],{},"\u003C!---->",[806,3760,3761,3767,3768,3770],{},[757,3762,3763,3764,3766],{},"A missing key under ",[747,3765,1211],{}," is text."," The key is escaped, because only a translation is trusted and a key can come from a request. A ",[747,3769,3191],{}," is yours and stays markup.",[806,3772,3773,3774,2288,3776,3778,3779,3197,3781,3783],{},"With ",[747,3775,3560],{},[747,3777,3191],{}," or the key stands whole on a miss, as in ",[747,3780,3084],{},[747,3782,3379],{}," is no longer split.",[806,3785,3786,3788,3789,3791,3792,768],{},[747,3787,3191],{}," stands in for a missing key in every branch, not the key itself, and a ",[747,3790,3666],{}," gets it through its getter on a miss. It used to do something only after ",[747,3793,3743],{},[806,3795,3796,857,3798,780,3800,1017,3802,3804,3805,3807],{},[747,3797,304],{},[747,3799,3639],{},[747,3801,3642],{},[747,3803,3595],{}," keeps ",[747,3806,1218],{},"; they are merged in.",[806,3809,3810,792,3812,3814,3815,3818,3819,3822],{},[747,3811,3642],{},[747,3813,3595],{}," output carries ",[747,3816,3817],{},"data-allow-mismatch=\"text\"",": a clock or a time zone that differs between server and browser no longer warns during hydration. Next to a named slot, the text around the slot sits in a ",[747,3820,3821],{},"\u003Cspan>"," of its own, because Vue checks the attribute only on an element's single text.",[806,3824,3825,792,3828,3831,3832,768],{},[747,3826,3827],{},".innerHTML",[747,3829,3830],{},"textContent"," attributes are dropped along with ",[747,3833,3834],{},"innerHTML",[806,3836,3837,792,3839,3841,3842,3844,3845,3848,3849,3851],{},[747,3838,304],{},[747,3840,316],{}," read the active dictionary, as ",[747,3843,779],{}," does, not the route's chunk. Evicted chunks (",[747,3846,3847],{},"cacheMaxSize",") no longer show raw keys. A page in its leaving transition now reads what ",[747,3850,779],{}," reads there: the new page's dictionary, falling through to its own on a miss, so a key both pages define shows the new text, and after a locale switch its own keys show raw until it unmounts.",[798,3853,3855,792,3857],{"id":3854},"i18n-switcher-and-i18n-link",[747,3856,312],{},[747,3858,308],{},[833,3860,3861,3892,3911,3963],{},[806,3862,3863,3866,3867,3870,3871,3873,3874,3877,3878,3881,3882,3884,3885,3887,3888,3891],{},[757,3864,3865],{},"A click on a switcher link is one navigation."," It is a plain ",[747,3868,3869],{},"\u003Ca>"," calling ",[747,3872,786],{},", not a ",[747,3875,3876],{},"NuxtLink"," plus a click handler, so ",[747,3879,3880],{},"router-link-active"," classes are gone. The ",[747,3883,1889],{}," still carries ",[747,3886,2789],{},", and the current locale's link still has ",[747,3889,3890],{},"aria-current=\"page\"",". Ctrl\u002Fcmd-click opens a new tab and leaves this tab alone. Links keep the query and hash.",[806,3893,3894,3895,3898,3899,815,3902,3905,3906,792,3908,3910],{},"The button is ",[747,3896,3897],{},"type=\"button\"",", so it no longer submits a surrounding form, and has ",[747,3900,3901],{},"aria-expanded",[747,3903,3904],{},"aria-haspopup"," is gone, in the module, ",[747,3907,688],{},[747,3909,624],{},": it promised a menu, and the list is links. Escape and a click outside close the dropdown; two switchers no longer stay open together.",[806,3912,3913,3914,792,3917,3920,3921,3924,3925,3928,3929,3931,3932,780,3935,3938,3939,3942,3943,3946,3947,3645,3950,3953,3954,3957,3958,1751,3960,3962],{},"The wrapper and dropdown have the classes ",[747,3915,3916],{},"i18n-switcher-wrapper",[747,3918,3919],{},"i18n-switcher-dropdown","; the button has ",[747,3922,3923],{},"i18n-switcher-button"," as well as ",[747,3926,3927],{},"language-switcher",", and its label sits in a ",[747,3930,3821],{},". Default styles use logical CSS properties (",[747,3933,3934],{},"inset-inline-start",[747,3936,3937],{},"margin-inline-start","), and the caret is ",[747,3940,3941],{},"▾",". The dropdown has ",[747,3944,3945],{},"z-index: 1000"," (it was 10), ",[747,3948,3949],{},"min-width: 150px",[747,3951,3952],{},"box-shadow",", the wrapper ",[747,3955,3956],{},"vertical-align: middle",". Each link has ",[747,3959,2908],{},[747,3961,2719],{}," when the locale sets it.",[806,3964,3965,3197,3967,780,3970,792,3972,3974,3975,780,3978,3981,3982,1017,3985,3988,3989,2544,3992,792,3995,3998,3999,780,4002,4005,4006,815,4008,4011,4012,4015],{},[747,3966,308],{},[747,3968,3969],{},"https:\u002F\u002F",[747,3971,1813],{},[747,3973,1816],{}," are matched in any case (",[747,3976,3977],{},"HTTPS:\u002F\u002Fx.com",[747,3979,3980],{},"Mailto:","). A bare ",[747,3983,3984],{},"report.pdf",[747,3986,3987],{},"index.html"," is a route, not ",[747,3990,3991],{},"https:\u002F\u002Freport.pdf",[747,3993,3994],{},"example.com",[747,3996,3997],{},"example.com:8080"," stay external. A file ending that is also a TLD (",[747,4000,4001],{},"example.md",[747,4003,4004],{},"x.zip",") counts as a file: write ",[747,4007,3969],{},[747,4009,4010],{},"activeStyle"," ignores a trailing slash, the query and the hash. It is typed ",[747,4013,4014],{},"CSSProperties"," now, so some typed values may need a change.",[798,4017,4019],{"id":4018},"hooks-plugins-and-types","Hooks, plugins and types",[833,4021,4022,4051,4063,4080,4091,4102,4116,4122,4139,4145,4158],{},[806,4023,4024,4034,4035,4038,4039,4042,4043,4046,4047,4050],{},[757,4025,4026,4029,4030,4033],{},[747,4027,4028],{},"i18n:register"," runs at ",[747,4031,4032],{},"app:created"," on startup,"," after every plugin instead of between them. A plugin with ",[747,4036,4037],{},"order"," above 1 or ",[747,4040,4041],{},"enforce: 'post'"," now has its subscriber called on startup too, but no longer reads registered keys in its own ",[747,4044,4045],{},"setup",". In a navigation the hook now runs before other plugins' ",[747,4048,4049],{},"router.beforeEach"," guards.",[806,4052,4053,4058,4059,4062],{},[757,4054,4055,4057],{},[747,4056,4028],{}," gets the locale of the page it fills."," Under ",[747,4060,4061],{},"hashMode"," a navigation that changes the locale used to pass the old one, and the keys landed in the wrong chunk.",[806,4064,4065,4070,4071,4074,4075,2127,4078,768],{},[757,4066,4067,4069],{},[747,4068,4028],{}," is a runtime hook:"," register it with ",[747,4072,4073],{},"nuxtApp.hook('i18n:register', …)"," in a plugin, without ",[747,4076,4077],{},"@ts-expect-error",[766,4079,201],{"href":202},[806,4081,4082,4090],{},[757,4083,4084,792,4087],{},[747,4085,4086],{},"hooks: false",[747,4088,4089],{},"define: false"," still turn their parts off.",[806,4092,4093,4101],{},[757,4094,3773,4095,780,4098,4100],{},[747,4096,4097],{},"plugin: false",[747,4099,1714],{}," stays callable"," and does nothing at runtime. It used to crash the page.",[806,4103,4104,4105,4107,4108,4111,4112,4115],{},"The ",[747,4106,1116],{}," option no longer documents ",[747,4109,4110],{},"i18n:beforeLocaleSwitch"," \u002F ",[747,4113,4114],{},"i18n:afterLocaleSwitch","; they were never emitted.",[806,4117,4118,4121],{},[747,4119,4120],{},"const { $defineI18nRoute } = useNuxtApp()"," in a page now works with configs that use variables.",[806,4123,4124,4126,4127,780,4130,780,4133,815,4136,4138],{},[747,4125,1254],{}," has more keys: ",[747,4128,4129],{},"clearCache",[747,4131,4132],{},"pluralFunc",[747,4134,4135],{},"pluralLocale",[747,4137,4129],{}," is on its type.",[806,4140,4141,4144],{},[747,4142,4143],{},"$getRouteName(route)"," answers for the route it is given. It returned an empty string.",[806,4146,4147,4150,4151,4154,4155,768],{},[747,4148,4149],{},"useI18nLocale()"," drops ",[747,4152,4153],{},"getLocaleWithServerFallback(serverLocale)",": write ",[747,4156,4157],{},"getPreferredLocale() ?? serverLocale ?? null",[806,4159,4160,4166],{},[757,4161,4162,4165],{},[747,4163,4164],{},"$getI18nConfig()"," is read-only on the server in dev."," A write throws there, and in production it would reach every request.",[798,4168,4170],{"id":4169},"server-build-and-deployment","Server, build and deployment",[833,4172,4173,4193,4225,4249,4263,4304,4314,4327,4339,4357,4368,4378,4404,4423,4436],{},[806,4174,4175,4178,4179,4182,4183,1751,4185,4188,4189,4192],{},[757,4176,4177],{},"A page's payload file holds only what differs from the locale's root."," The client loads the root once and merges each page over it, so disk and Edge bundles shrink and a second page costs a fraction of the first. ",[747,4180,4181],{},"premerged"," now writes ",[747,4184,3005],{},[747,4186,4187],{},"\u002F_locales\u002F\u003Cpage>\u002F\u003Clocale>\u002Fdata.json"," holds only the difference: anything that reads those files directly must merge the two. A full dictionary is still a valid file, so a host or ",[747,4190,4191],{},"source"," mode that serves one keeps working.",[806,4194,4195,4198,4199,4202,4203,4206,4207,815,4211,3804,4214,4217,4218,4221,4222,768],{},[757,4196,4197],{},"Dictionary files are cached by version."," A URL with the current ",[747,4200,4201],{},"?v="," is pinned for a year on a Node server, other URLs revalidate, and a host's static copy answers ",[747,4204,4205],{},"max-age=60",": see ",[766,4208,4210],{"href":4209},"\u002Fguide\u002Fdeployment#cache-headers-and-datebuild","Cache headers",[747,4212,4213],{},"httpCacheControl: false",[747,4215,4216],{},"max-age=0",". A translation changed without a rebuild reaches a browser only when ",[747,4219,4220],{},"v"," moves: set ",[747,4223,4224],{},"NUXT_I18N_DATE_BUILD",[806,4226,4227,4233,4234,4237,4238,4240,4241,4244,4245,768],{},[757,4228,4229,4230,768],{},"Dictionaries follow ",[747,4231,4232],{},"app.cdnURL"," The browser fetches public payload files from ",[747,4235,4236],{},"\u003CcdnURL>\u002F_locales\u002F...",", where it used ",[747,4239,2789],{},": the CDN must hold ",[747,4242,4243],{},"_locales\u002F"," and allow your site's origin (CORS). See ",[766,4246,4248],{"href":4247},"\u002Fguide\u002Fdeployment#app-baseurl-and-payload-hosts","App baseURL and payload hosts",[806,4250,4251,4258,4259,4262],{},[757,4252,4253,4254,4257],{},"SSR no longer requests ",[747,4255,4256],{},"\u002F_locales"," over HTTP,"," so a server middleware or a log on that route stops seeing the render's reads. An external ",[747,4260,4261],{},"apiBaseServerHost"," still goes over HTTP.",[806,4264,4265,4268,4269,857,4272,792,4275,4278,4279,4282,4283,857,4285,1751,4287,4289,4290,4293,4294,815,4298,4300,4301,768],{},[757,4266,4267],{},"A failed read no longer sticks, and neither does a 404."," A 404 from a host means it has no such file: the render shows the root dictionary, as the browser does, nothing is kept, and the file is read once it appears. Any other failure, a 200 that is not a JSON object, or an unreadable or corrupt local file reaches no cache, and the next request reads again: a page render logs a warning, shows raw keys and answers ",[747,4270,4271],{},"503",[747,4273,4274],{},"no-store",[747,4276,4277],{},"Retry-After",", so a route rule or a CDN keeps nothing of it while the browser still reads the dictionary on hydration, ",[747,4280,4281],{},"\u002F_locales\u002F..."," answers ",[747,4284,4271],{},[747,4286,4274],{},[747,4288,1144],{}," gives a ",[747,4291,4292],{},"t"," that answers the key or the default. During an outage every request reaches the host, and a host that sends no response headers for 60 seconds fails the read. A slow download of a large file has no limit. See ",[766,4295,4297],{"href":4296},"\u002Fguide\u002Fdeployment#when-a-dictionary-cannot-be-read","When a dictionary cannot be read",[747,4299,4256],{}," passes that 404 on too, where it answered ",[747,4302,4303],{},"200 {}",[806,4305,4306,4309,4310,4313],{},[757,4307,4308],{},"A prerender that cannot load its dictionary fails,"," and so does one whose host has neither the page's file nor the root file. The route is a 500, a warning names the locale and the page, and no file is written; with Nuxt's default ",[747,4311,4312],{},"failOnError"," the build exits 1. A page with no file of its own over a root file prerenders with the root.",[806,4315,4316,4319,4320,4323,4324,4326],{},[757,4317,4318],{},"A host set at build time answers SSR,"," also with the default public copy, and on an error page on an internal path. The public file used to answer. ",[747,4321,4322],{},"NUXT_I18N_APP_BASE_SERVER_HOST"," at runtime now reaches ",[747,4325,4256],{}," and the server loader, and the render reads either host through that loader.",[806,4328,4329],{},[757,4330,3557,4331,4334,4335,4338],{},[747,4332,4333],{},"nitro.output.publicDir",", and any other layout where ",[747,4336,4337],{},"public\u002F"," is not beside the server, embeds the payloads.",[806,4340,4341,4350,4351,4353,4354,768],{},[757,4342,4343,4346,4347,4349],{},[747,4344,4345],{},"nuxi build --preset \u003Cstatic preset>"," prerenders as ",[747,4348,2136],{}," does,"," so it may write more files. ",[747,4352,2136],{}," prerenders every static page in each locale that serves it, linked or not, unless a route rule sets ",[747,4355,4356],{},"prerender: false",[806,4358,4359,4367],{},[757,4360,4361,1017,4363,4366],{},[747,4362,4191],{},[747,4364,4365],{},"publicAssets: false"," on static output warns."," There is nothing for the browser to read.",[806,4369,4370,4373,4374,768],{},[757,4371,4372],{},"The embed warning is a size check now."," The build warns only past a platform's limit: see ",[766,4375,4377],{"href":4376},"\u002Fguide\u002Fdeployment#bundle-limits-on-edge","Bundle limits",[806,4379,4380,4385,4386,4388,4389,4391,4392,4395,4396,780,4399,4401,4402,768],{},[757,4381,4382,4384],{},[747,4383,893],{}," is set wherever the visitor decides:"," on every page under ",[747,4387,1573],{},", and on ",[747,4390,1438],{}," and any other URL that can redirect by preference. It holds ",[747,4393,4394],{},"Cookie"," when a cookie is in use and, with ",[747,4397,4398],{},"autoDetectLanguage",[747,4400,1517],{},". Check your CDN's cache key: see ",[766,4403,898],{"href":897},[806,4405,4406,4411,4412,4415,4416,4419,4420,768],{},[757,4407,4408,4410],{},[747,4409,4256],{}," caching changed."," There is no Nitro route cache on ",[747,4413,4414],{},"\u002F{apiBaseUrl}\u002F**",", and the ",[747,4417,4418],{},"s-maxage=60, stale-while-revalidate"," header is gone. If you relied on that cache, put a CDN in front of the payload route. An empty dictionary is never ",[747,4421,4422],{},"immutable",[806,4424,4425,4428,4429,4431,4432,4435],{},[757,4426,4427],{},"The server cache is bounded by default:"," at most 1000 entries when ",[747,4430,3847],{}," is unset. ",[747,4433,4434],{},"cacheTtl"," counts from when an entry was stored; reads no longer extend it.",[806,4437,4438,4448],{},[757,4439,4440,4441,4447],{},"New optional ",[766,4442,4444],{"href":4443},"\u002Fguide\u002Fperformance#shared-cache-for-several-instances",[747,4445,4446],{},"cacheStorage",":"," a dictionary cache several instances share. Unset, nothing changes.",[798,4450,791],{"id":4451},"framework-packages",[743,4453,4104,4454,4457],{},[747,4455,4456],{},"2.0.0"," packages depend on each other: upgrade them together.",[4459,4460,4462,780,4464,780,4466],"h4",{"id":4461},"i18n-microreact-i18n-micropreact-i18n-microsolid",[747,4463,652],{},[747,4465,648],{},[747,4467,664],{},[978,4469,4470,4483],{},[981,4471,4472],{},[984,4473,4474,4477,4480],{},[987,4475,4476],{},"Package",[987,4478,4479],{},"Change",[987,4481,4482],{},"Action",[994,4484,4485,4509,4522,4546,4571,4592,4611,4656,4676,4715,4738,4771,4791,4820,4850,4877],{},[984,4486,4487,4489,4506],{},[999,4488,238],{},[999,4490,4491,4492,4495,4496,4499,4500,792,4503],{},"React 18 or newer; ",[747,4493,4494],{},"use-sync-external-store"," is no longer a dependency; ",[747,4497,4498],{},"react-dom"," is an optional peer; new entries ",[747,4501,4502],{},"\u002Fclient",[747,4504,4505],{},"\u002Fserver",[999,4507,4508],{},"Stay on 1.x for React 16 or 17",[984,4510,4511,4513,4519],{},[999,4512,238],{},[999,4514,4515,4516],{},"Renders on a server: 1.x failed with ",[747,4517,4518],{},"Missing getServerSnapshot",[999,4520,4521],{},"—",[984,4523,4524,4527,4534],{},[999,4525,4526],{},"react, solid",[999,4528,4529,4530,4533],{},"Router adapters moved to the ",[747,4531,4532],{},"\u002Frouter"," subpath",[999,4535,4536,4539,4540,1004,4543,3255],{},[747,4537,4538],{},"import { createReactRouterAdapter } from '@i18n-micro\u002Freact\u002Frouter'"," (Solid: ",[747,4541,4542],{},"createSolidRouterAdapter",[747,4544,4545],{},"@i18n-micro\u002Fsolid\u002Frouter",[984,4547,4548,4550,4566],{},[999,4549,234],{},[999,4551,4552,4555,4556,2544,4559,4562,4563],{},[747,4553,4554],{},"createBrowserHistoryAdapter"," moved to ",[747,4557,4558],{},"@i18n-micro\u002Fpreact\u002Frouter",[747,4560,4561],{},"createPreactRouterAdapter"," is removed. New optional third argument ",[747,4564,4565],{},"ssrUrl",[999,4567,4568,4569],{},"Change the import. Under SSR pass the request's URL, or links and the switcher render as on ",[747,4570,1438],{},[984,4572,4573,4576,4589],{},[999,4574,4575],{},"react, preact",[999,4577,4578,792,4581,4584,4585,4588],{},[747,4579,4580],{},"numberFormats",[747,4582,4583],{},"datetimeFormats"," are honoured, so ",[747,4586,4587],{},"tn(n, 'currency')"," output changes. They used to be ignored",[999,4590,4591],{},"Check named formats",[984,4593,4594,4596,4608],{},[999,4595,4575],{},[999,4597,4598,4599,4601,4602,4605,4606],{},"A link to ",[747,4600,1438],{}," or a locale root is active on an exact match only; ",[747,4603,4604],{},"className"," on the switcher adds to ",[747,4607,3916],{},[999,4609,4610],{},"Check active-link styles",[984,4612,4613,4616,4651],{},[999,4614,4615],{},"all three",[999,4617,4618,4620,4621,3197,4625,4627,4628,4630,4631,780,4633,792,4635,4637,4638,792,4640,4642,4643,780,4646,792,4648,4650],{},[747,4619,3609],{}," follows ",[766,4622,4623],{"href":1224},[747,4624,304],{},[747,4626,1211],{}," escapes params, ",[747,4629,3560],{}," keeps fractions, ",[747,4632,3639],{},[747,4634,3642],{},[747,4636,3595],{}," beat a param of their name, ",[747,4639,3743],{},[747,4641,3191],{}," apply in every branch, a hidden value renders bare, with no element. ",[747,4644,4645],{},"dangerouslySetInnerHTML",[747,4647,3834],{},[747,4649,3830],{}," attributes are dropped",[999,4652,4653,4654],{},"Move markup from params into the translation or ",[747,4655,301],{},[984,4657,4658,4660,4669],{},[999,4659,4615],{},[999,4661,4662,4663,4665,4666,4668],{},"New ",[747,4664,301],{}," prop on ",[747,4667,3609],{}," for rich text, children as Vue's default slot",[999,4670,4671,4672],{},"See ",[766,4673,4675],{"href":4674},"\u002Fintegrations\u002F#rich-text","Rich text",[984,4677,4678,4680,4706],{},[999,4679,4615],{},[999,4681,4682,4685,4686,4689,4690,4692,4693,4695,4696,4698,4699,4701,4702,4705],{},[747,4683,4684],{},"I18nSwitcher"," matches the Vue one: ",[747,4687,4688],{},"\u003Ca href>"," items with ",[747,4691,3890],{}," on the current locale, ",[747,4694,3941],{}," with a space before it, logical CSS, ",[747,4697,3927],{}," on the button, no ",[747,4700,3904],{},", clicks bubble, Escape closes it. A caller's ",[747,4703,4704],{},"getLocaleName"," wins over the list in Solid too",[999,4707,4708,4709,1017,4712],{},"Check styles and tests that looked for ",[747,4710,4711],{},"li button",[747,4713,4714],{},"▼",[984,4716,4717,4719,4736],{},[999,4718,4615],{},[999,4720,4721,4724,4725,792,4728,4731,4732,4735],{},[747,4722,4723],{},"I18nLink",": a user ",[747,4726,4727],{},"onClick",[747,4729,4730],{},"style"," are kept, a modified click or ",[747,4733,4734],{},"target"," is left to the browser, query and hash do not count for the active check. Without a router a click is the browser's own and no link is active",[999,4737,4521],{},[984,4739,4740,4742,4761],{},[999,4741,4575],{},[999,4743,4744,780,4747,792,4750,4753,4754,2544,4757,4760],{},[747,4745,4746],{},"I18nLocalesContext",[747,4748,4749],{},"I18nDefaultLocaleContext",[747,4751,4752],{},"I18nRouterContext"," are one ",[747,4755,4756],{},"I18nConfigContext",[747,4758,4759],{},"I18nContext"," still holds the instance",[999,4762,1027,4763,4766,4767,4770],{},[747,4764,4765],{},"I18nProvider",", or the ",[747,4768,4769],{},"useI18nLocales","-style hooks",[984,4772,4773,4775,4785],{},[999,4774,250],{},[999,4776,4777,4778,4780,4781,4784],{},"One context: ",[747,4779,4759],{}," holds ",[747,4782,4783],{},"{ i18n, locales, defaultLocale, router }","; the other three are gone",[999,4786,1027,4787,4766,4789,4770],{},[747,4788,4765],{},[747,4790,4769],{},[984,4792,4793,4795,4817],{},[999,4794,4615],{},[999,4796,4797,4800,4801,4804,4805,4808,4809,4812,4813,4816],{},[747,4798,4799],{},"getCurrentPath"," of the adapters has the query and hash, so ",[747,4802,4803],{},"switchLocale"," keeps them; ",[747,4806,4807],{},"resolvePath"," keeps them too. ",[747,4810,4811],{},"getRoute().fullPath"," has them as well, and a repeated key in ",[747,4814,4815],{},"getRoute().query"," is an array",[999,4818,4819],{},"Custom strategies: return the full path, links compare by page",[984,4821,4822,4824,4848],{},[999,4823,4575],{},[999,4825,4826,792,4829,4832,4833,2544,4836,1004,4838,4840,4841,4844,4845,4847],{},[747,4827,4828],{},"ReactI18n",[747,4830,4831],{},"PreactI18n"," are the runtime's ",[747,4834,4835],{},"I18n",[747,4837,4292],{},[747,4839,1254],{}," keeps its identity until the store changes; ",[747,4842,4843],{},"defaultLocale()"," without a value is ",[747,4846,2699],{},", it used to follow the locale",[999,4849,4521],{},[984,4851,4852,4854,4875],{},[999,4853,4615],{},[999,4855,4856,4857,4859,4860,4862,4863,4866,4867,4869,4870,1363,4872],{},"A nested ",[747,4858,4765],{}," without ",[747,4861,2602],{}," keeps the outer instance; a provider with no instance at all throws. In React and Preact it may instead get the ",[747,4864,4865],{},"createI18n"," options as props. ",[747,4868,2551],{}," add their ",[747,4871,3128],{},[747,4873,4874],{},"localeIso",[999,4876,4521],{},[984,4878,4879,4881,4933],{},[999,4880,250],{},[999,4882,4883,4886,4887,4889,4890,4893,4894,4896,4897,780,4900,780,4903,780,4906,3645,4909,4911,4912,4915,4916,815,4918,4920,4921,780,4923,792,4925,4928,4929,4932],{},[747,4884,4885],{},"SolidI18n"," is built on the runtime, and the package now depends on ",[747,4888,660],{}," and publishes ",[747,4891,4892],{},"src\u002F"," through a ",[747,4895,250],{}," export condition. ",[747,4898,4899],{},"routeMessages",[747,4901,4902],{},"loadFromUrl",[747,4904,4905],{},"hasTranslation",[747,4907,4908],{},"clear",[747,4910,2699],{}," setter are new. ",[747,4913,4914],{},"getCurrentPathAccessor"," is removed: read a signal in ",[747,4917,4799],{},[747,4919,1254],{}," no longer throws without ",[747,4922,2551],{},[747,4924,4769],{},[747,4926,4927],{},"useI18nDefaultLocale"," answer ",[747,4930,4931],{},"undefined",". The adapter no longer needs a reactive owner",[999,4934,4935],{},"Remove the accessor from custom strategies",[4459,4937,4939],{"id":4938},"i18n-microvue",[747,4940,688],{},[978,4942,4943,4951],{},[981,4944,4945],{},[984,4946,4947,4949],{},[987,4948,4479],{},[987,4950,4482],{},[994,4952,4953,4966,4993,5031,5069],{},[984,4954,4955,4964],{},[999,4956,4957,792,4959,4584,4961,4963],{},[747,4958,4580],{},[747,4960,4583],{},[747,4962,4587],{}," output changes",[999,4965,4591],{},[984,4967,4968,4985],{},[999,4969,4970,4972,4973,2544,4977,792,4979,4981,4982],{},[747,4971,3609],{}," is a functional component and follows ",[766,4974,4975],{"href":1224},[747,4976,304],{},[747,4978,4684],{},[747,4980,4723],{}," follow ",[766,4983,4984],{"href":923},"the section above",[999,4986,1610,4987,1212,4989,4992],{},[747,4988,1233],{},[747,4990,4991],{},"\u003CI18nT>"," no longer gives a component instance",[984,4994,4995,5017],{},[999,4996,4997,792,4999,5002,5003,780,5005,792,5007,2544,5010,5013,5014,5016],{},[747,4998,4723],{},[747,5000,5001],{},"createVueRouterAdapter"," resolve ",[747,5004,1695],{},[747,5006,1297],{},[747,5008,5009],{},"hash",[747,5011,5012],{},"#top"," stays on this page; ",[747,5015,4803],{}," and the switcher keep the query and hash",[999,5018,5019,5020,5023,5024,5026,5027,5030],{},"Check tests that pinned ",[747,5021,5022],{},"\u002Fde"," for a named target. An unknown ",[747,5025,1695],{}," now throws, as ",[747,5028,5029],{},"RouterLink"," does",[984,5032,5033,5067],{},[999,5034,5035,5037,5038,5041,5042,5045,5046,5048,5049,5051,5052,5055,5056,792,5058,5060,5061,5063,5064,5066],{},[747,5036,295],{}," no longer builds ",[747,5039,5040],{},"\u002F\u002Fde\u002F"," with the default ",[747,5043,5044],{},"baseUrl: '\u002F'","; canonical and ",[747,5047,1702],{}," of one page agree (",[747,5050,5022],{},", was ",[747,5053,5054],{},"\u002Fde\u002F","), and whitelisted query params reach ",[747,5057,1702],{},[747,5059,2767],{},", as in Nuxt. Canonical and ",[747,5062,2810],{}," keep ",[747,5065,2863],{}," params with the vue-router adapter",[999,5068,4521],{},[984,5070,5071,5082],{},[999,5072,5073,3197,5076,5078,5079],{},[747,5074,5075],{},"I18nRoutingStrategy",[747,5077,4807],{}," may get a location object and a path with a query and hash; new optional ",[747,5080,5081],{},"toHref",[999,5083,5084],{},"Custom strategies: keep what follows the path",[4459,5086,5088],{"id":5087},"i18n-microastro",[747,5089,624],{},[978,5091,5092,5100],{},[981,5093,5094],{},[984,5095,5096,5098],{},[987,5097,4479],{},[987,5099,4482],{},[994,5101,5102,5125,5158,5176,5197,5220,5248,5283,5299,5322,5340,5359,5371,5392,5421,5437,5458,5479,5507,5523,5556],{},[984,5103,5104,5114],{},[999,5105,5106,5109,5110,5113],{},[747,5107,5108],{},"i18nIntegration"," bundles ",[747,5111,5112],{},"translationDir"," and installs the middleware",[999,5115,5116,5117,5120,5121,5124],{},"Delete a ",[747,5118,5119],{},"src\u002Fmiddleware.ts"," that only copies the setup. To keep it, pass ",[747,5122,5123],{},"middleware: false",", or its options are lost (a warning says so)",[984,5126,5127,5146],{},[999,5128,5129,1351,5131,1212,5134,780,5137,780,5139,792,5142,5145],{},[747,5130,5108],{},[757,5132,5133],{},"throws",[747,5135,5136],{},"messages",[747,5138,3560],{},[747,5140,5141],{},"missingHandler",[747,5143,5144],{},"routingStrategy",", and no longer sets a global routing strategy",[999,5147,5148,5149,4111,5151,1080,5154,1087,5156],{},"Pass them to ",[747,5150,4865],{},[747,5152,5153],{},"createI18nMiddleware",[747,5155,5119],{},[747,5157,5123],{},[984,5159,5160,5173],{},[999,5161,5162,5165,5166,792,5169,5172],{},[747,5163,5164],{},"I18nIntegrationOptions"," no longer inherits the module's options, so about 45 fields such as ",[747,5167,5168],{},"strategy",[747,5170,5171],{},"meta"," are TypeScript errors. They never did anything there",[999,5174,5175],{},"Remove them",[984,5177,5178,5190],{},[999,5179,5180,780,5183,4555,5186,5189],{},[747,5181,5182],{},"loadTranslationsFromDir",[747,5184,5185],{},"loadTranslationsIntoI18n",[747,5187,5188],{},"@i18n-micro\u002Fastro\u002Fnode",", which is ESM only",[999,5191,5192,5193,5196],{},"Change the import; ",[747,5194,5195],{},"virtual:i18n-micro\u002Fmessages"," has the bundled dictionaries",[984,5198,5199,5214],{},[999,5200,5201,780,5204,780,5207,5210,5211],{},[747,5202,5203],{},"getGlobalRoutingStrategy",[747,5205,5206],{},"setGlobalRoutingStrategy",[747,5208,5209],{},"runWithRoutingStrategy"," removed, with their ",[747,5212,5213],{},"AsyncLocalStorage",[999,5215,5216,5217],{},"Read ",[747,5218,5219],{},"Astro.locals.routingStrategy",[984,5221,5222,5246],{},[999,5223,5224,5227,5228,3197,5230,3715,5233,5236,5237,5240,5241,5243,5244],{},[747,5225,5226],{},"AstroI18n"," extends the runtime ",[747,5229,4835],{},[747,5231,5232],{},"clone()",[747,5234,5235],{},"fork()",", the ",[747,5238,5239],{},"_storage"," option is gone. The package depends on ",[747,5242,660],{},", no longer on ",[747,5245,640],{},[999,5247,4521],{},[984,5249,5250,5269],{},[999,5251,5252,5253,3715,5256,5259,5260,5263,5264,3715,5267],{},"Dynamic pages are one route: ",[747,5254,5255],{},"\u002Fblog\u002Fhello",[747,5257,5258],{},"blog-slug"," (was ",[747,5261,5262],{},"blog-hello","), ",[747,5265,5266],{},"[...path]",[747,5268,1820],{},[999,5270,5271,5272,1363,5275,5278,5279,5282],{},"Move ",[747,5273,5274],{},"pages\u002Fblog-hello\u002F",[747,5276,5277],{},"pages\u002Fblog-slug\u002F",". A custom ",[747,5280,5281],{},"getRouteName"," gets the pattern as a third argument",[984,5284,5285,5291],{},[999,5286,5287,5290],{},[747,5288,5289],{},"base"," works: helpers return URLs with it, the cookie lives under it",[999,5292,1610,5293,5295,5296],{},[747,5294,5119],{}," of your own passes ",[747,5297,5298],{},"base: config.base",[984,5300,5301,5318],{},[999,5302,5303,5304,5307,5308,5310,5311,5313,5314,5317],{},"The URL decides the page locale; ",[747,5305,5306],{},"autoDetect"," is a 302 from ",[747,5309,1438],{}," to the preferred locale's home; new ",[747,5312,2560],{}," middleware option; ",[747,5315,5316],{},"redirectToDefault"," is implemented",[999,5319,4671,5320],{},[766,5321,152],{"href":153},[984,5323,5324,5330],{},[999,5325,5326,5327],{},"A page view from a same-origin page of another locale writes the locale cookie and does not redirect; endpoints, images, 404s, posts and prefetches do not. Server islands and actions never redirect and carry ",[747,5328,5329],{},"Vary: Referer",[999,5331,5332,5333,5336,5337],{},"Check your CDN if it refuses ",[747,5334,5335],{},"Set-Cookie","; behind a proxy set ",[747,5338,5339],{},"security.allowedDomains",[984,5341,5342,5357],{},[999,5343,5344,5345,5348,5349,5352,5353,5356],{},"Disabled locales: ",[747,5346,5347],{},"config.localeCodes"," leaves them out, ",[747,5350,5351],{},"\u002Ffr"," is no locale, ",[747,5354,5355],{},"prepareLocaleRewrite"," answers 404",[999,5358,4521],{},[984,5360,5361,5369],{},[999,5362,5363,792,5365,5368],{},[747,5364,5355],{},[747,5366,5367],{},"getLocaleRewritePath"," take a narrower type; anything that passed before still passes",[999,5370,4521],{},[984,5372,5373,5389],{},[999,5374,5375,5378,5379,5382,5383,5385,5386,5388],{},[747,5376,5377],{},"getI18nProps()"," without keys sends all ",[747,5380,5381],{},"t()"," can answer on the page, with a dev warning above 20 KB; ",[747,5384,2699],{}," is the instance's; ",[747,5387,2940],{}," always has the route",[999,5390,5391],{},"Pass the keys the island uses",[984,5393,5394,5419],{},[999,5395,5396,5398,5399,3715,5401,5404,5405,5051,5407,5410,5411,5414,5415,5418],{},[747,5397,295],{},": default ",[747,5400,884],{},[747,5402,5403],{},"site",", else root-relative (",[747,5406,1372],{},[747,5408,5409],{},"\u002F\u002Fabout","); links and metas carry ",[747,5412,5413],{},"id","; after ",[747,5416,5417],{},"Astro.rewrite"," it names the requested URL",[999,5420,4521],{},[984,5422,5423,5434],{},[999,5424,5425,3623,5428,5430,5431,5433],{},[747,5426,5427],{},"\u003CI18nT html>",[747,5429,1218],{},"; any ",[747,5432,2856],{}," works; attributes pass through; an empty translation renders empty, not the key",[999,5435,5436],{},"Move a param holding markup into the translation",[984,5438,5439,5456],{},[999,5440,5441,5444,5445,792,5448,5451,5452,5455],{},[747,5442,5443],{},"\u003CI18nLink>"," leaves external URLs, ",[747,5446,5447],{},"#hash",[747,5449,5450],{},"?query"," alone and keeps a trailing slash; ",[747,5453,5454],{},"localizePath"," the same, and with no locale it uses the current one",[999,5457,4521],{},[984,5459,5460,5476],{},[999,5461,5462,5465,5466,5469,5470,5473,5474],{},[747,5463,5464],{},"\u003CI18nSwitcher>"," keeps the query, one script for all switchers, ",[747,5467,5468],{},"hidden"," on the list, ",[747,5471,5472],{},"data-i18n-switcher"," instead of the generated ids, no ",[747,5475,3904],{},[999,5477,5478],{},"Check selectors",[984,5480,5481,5492],{},[999,5482,5483,5486,5487,792,5490],{},[747,5484,5485],{},"@i18n-micro\u002Fastro\u002Fclient"," only has ",[747,5488,5489],{},"translate",[747,5491,4905],{},[999,5493,5494,5495,780,5498,780,5501,780,5504],{},"Import adapters from ",[747,5496,5497],{},"\u002Fclient\u002Fvue",[747,5499,5500],{},"\u002Fclient\u002Freact",[747,5502,5503],{},"\u002Fclient\u002Fpreact",[747,5505,5506],{},"\u002Fclient\u002Fsvelte",[984,5508,5509,5518],{},[999,5510,5511,5514,5515,5517],{},[747,5512,5513],{},"client\u002Fvue"," no longer bundles its own Vue: reactivity works, and ",[747,5516,274],{}," must be installed",[999,5519,5520,5521],{},"Install ",[747,5522,274],{},[984,5524,5525,5548],{},[999,5526,5527,5528,5531,5532,3715,5535,5537,5538,780,5541,815,5544,5547],{},"Islands: ",[747,5529,5530],{},"has()"," is true for a subtree, ",[747,5533,5534],{},"t('')",[747,5536,1959],{},", as on the server; React and Preact get ",[747,5539,5540],{},"setLocale",[747,5542,5543],{},"setRoute",[747,5545,5546],{},"provideI18n"," takes a getter to follow new props",[999,5549,1027,5550,857,5553],{},[747,5551,5552],{},"provideI18n(() => props.i18n)",[747,5554,5555],{},"transition:persist",[984,5557,5558,5570],{},[999,5559,5560,780,5563,5566,5567],{},[747,5561,5562],{},"getLocale",[747,5564,5565],{},"getDefaultLocale"," throw without the middleware instead of answering ",[747,5568,5569],{},"'en'",[999,5571,4521],{},[4459,5573,5575],{"id":5574},"i18n-microvitepress",[747,5576,684],{},[978,5578,5579,5587],{},[981,5580,5581],{},[984,5582,5583,5585],{},[987,5584,4479],{},[987,5586,4482],{},[994,5588,5589,5619],{},[984,5590,5591,5617],{},[999,5592,5593,5594,792,5597,5599,5600,2544,5603,792,5605,5607,5608,780,5610,792,5612,5614,5615],{},"Links, the switcher, ",[747,5595,5596],{},"push",[747,5598,2822],{}," carry ",[747,5601,5602],{},"site.base",[747,5604,4807],{},[747,5606,5454],{}," stay relative to it; ",[747,5609,4580],{},[747,5611,4583],{},[747,5613,3586],{}," reach ",[747,5616,4865],{},[999,5618,4521],{},[984,5620,5621,5630],{},[999,5622,5623,5624,5627,5628],{},"The locale head with ",[747,5625,5626],{},"alternates: false"," also drops ",[747,5629,2767],{},[999,5631,4521],{},[4459,5633,5635,780,5637],{"id":5634},"i18n-micronode-i18n-microruntime",[747,5636,640],{},[747,5638,660],{},[978,5640,5641,5651],{},[981,5642,5643],{},[984,5644,5645,5647,5649],{},[987,5646,4476],{},[987,5648,4479],{},[987,5650,4482],{},[994,5652,5653,5666,5685,5699,5722,5732,5750],{},[984,5654,5655,5657,5664],{},[999,5656,226],{},[999,5658,5659,5660,5663],{},"Loads translations on Node 24 (",[747,5661,5662],{},"dirent.path"," is gone there)",[999,5665,4521],{},[984,5667,5668,5670,5683],{},[999,5669,226],{},[999,5671,4662,5672,792,5675,5678,5679,5682],{},[747,5673,5674],{},"run(locale, fn)",[747,5676,5677],{},"fork(locale)"," for requests; ",[747,5680,5681],{},"reload()"," swaps dictionaries instead of emptying them first, and logs no success message; a directory that is gone keeps the old ones, an emptied one empties them",[999,5684,4521],{},[984,5686,5687,5690,5696],{},[999,5688,5689],{},"node, astro, vitepress",[999,5691,5692,5693],{},"One reader of a locales folder: symlinked files are read, a missing folder warns, a file that is not a JSON object is reported and skipped, a BOM is fine. Messages start with ",[747,5694,5695],{},"[i18n]",[999,5697,5698],{},"Adjust tests that pinned the old messages",[984,5700,5701,5703,5720],{},[999,5702,246],{},[999,5704,5705,792,5707,4584,5709,5711,5712,780,5714,792,5717,5719],{},[747,5706,4580],{},[747,5708,4583],{},[747,5710,4587],{}," output changes; new ",[747,5713,3586],{},[747,5715,5716],{},"now",[747,5718,4874],{}," options",[999,5721,4591],{},[984,5723,5724,5726,5729],{},[999,5725,246],{},[999,5727,5728],{},"A write to a locale that is neither active nor fallback does not notify",[999,5730,5731],{},"A listener that wants every preload: read the store when the locale changes",[984,5733,5734,5736,5748],{},[999,5735,246],{},[999,5737,4662,5738,2544,5740,5743,5744,5747],{},[747,5739,5677],{},[747,5741,5742],{},"storage"," is a getter; ",[747,5745,5746],{},"loadFromUrls"," fetches in parallel and writes nothing if one fails",[999,5749,4521],{},[984,5751,5752,5755,5761],{},[999,5753,5754],{},"runtime, vue, node, astro",[999,5756,5757,5760],{},[747,5758,5759],{},"addRouteTranslations(locale, route, messages, false)"," replaces the chunk. It used to merge",[999,5762,5763,5764,5766],{},"Pass ",[747,5765,2308],{},", or the default, to merge",[798,5768,796],{"id":5769},"other-packages",[743,5771,5772],{},"These are public on npm, but most apps reach them only through the module.",[4459,5774,5776,780,5778],{"id":5775},"i18n-microcore-i18n-microutils",[747,5777,628],{},[747,5779,680],{},[978,5781,5782,5792],{},[981,5783,5784],{},[984,5785,5786,5788,5790],{},[987,5787,4476],{},[987,5789,4479],{},[987,5791,4482],{},[994,5793,5794,5813,5847,5861,5882,5895,5909,5929,5944,5970,5985,5999,6013],{},[984,5795,5796,5798,5804],{},[999,5797,218],{},[999,5799,5800,5803],{},[747,5801,5802],{},"useTranslationHelper(storage)"," is gone",[999,5805,5806,5809,5810],{},[747,5807,5808],{},"new TranslationHelper(storage)",". A destructured method loses ",[747,5811,5812],{},"this",[984,5814,5815,5817,5841],{},[999,5816,218],{},[999,5818,5819,4150,5822,780,5825,780,5828,2544,5831,4150,5834,780,5837,5840],{},[747,5820,5821],{},"TranslationHelper",[747,5823,5824],{},"setCache",[747,5826,5827],{},"getGeneration",[747,5829,5830],{},"lookupIn",[747,5832,5833],{},"BaseI18n",[747,5835,5836],{},"ensurePinnedChunk",[747,5838,5839],{},"invalidatePin","; route chunks hold only their own keys and lookups fall through to the root chunk",[999,5842,5843,5844],{},"Custom adapters: use ",[747,5845,5846],{},"lookup(chunkKey, key)",[984,5848,5849,5851,5856],{},[999,5850,218],{},[999,5852,5853,5803],{},[747,5854,5855],{},"TranslationHelper.hasPageTranslation",[999,5857,5858],{},[747,5859,5860],{},"hasCache(locale, routeName)",[984,5862,5863,5865,5870],{},[999,5864,218],{},[999,5866,5867,5803],{},[747,5868,5869],{},"TranslationHelper.loadTranslations",[999,5871,5872,2544,5875,5878,5879],{},[747,5873,5874],{},"mergeTranslation(locale, routeName, data)",[747,5876,5877],{},"routeName"," has no default, the root chunk is ",[747,5880,5881],{},"'index'",[984,5883,5884,5886,5891],{},[999,5885,218],{},[999,5887,5888,5803],{},[747,5889,5890],{},"TranslationHelper.loadPageTranslations",[999,5892,5893],{},[747,5894,5874],{},[984,5896,5897,5899,5904],{},[999,5898,218],{},[999,5900,5901,5803],{},[747,5902,5903],{},"BaseI18n.loadRouteTranslationsCore(locale, routeName, translations, merge)",[999,5905,5906],{},[747,5907,5908],{},"loadTranslationsCore(locale, translations, merge, routeName)",[984,5910,5911,5913,5927],{},[999,5912,218],{},[999,5914,5915,5918,5919,5921,5922,5924,5925],{},[747,5916,5917],{},"tc"," passes the count as a ",[747,5920,3568],{},", so a custom rule sees ",[747,5923,3571],{}," where it saw ",[747,5926,3575],{},[999,5928,4521],{},[984,5930,5931,5933,5938],{},[999,5932,266],{},[999,5934,5935,5803],{},[747,5936,5937],{},"resolveI18nConfigWithRuntimeOverrides(base, pub, warn)",[999,5939,5940,5943],{},[747,5941,5942],{},"createI18nConfigResolver(warn)(base, pub)",". It memoizes, reads the environment once, and its result is frozen in dev",[984,5945,5946,5948,5967],{},[999,5947,266],{},[999,5949,5950,5951,780,5954,780,5957,780,5960,780,5963,5966],{},"Subpaths ",[747,5952,5953],{},".\u002Froute",[747,5955,5956],{},".\u002Froute-pattern",[747,5958,5959],{},".\u002Fbuild",[747,5961,5962],{},".\u002Fpayload-stats",[747,5964,5965],{},".\u002Fpayload-config"," removed",[999,5968,5969],{},"They were module internals",[984,5971,5972,5974,5979],{},[999,5973,266],{},[999,5975,5976,5803],{},[747,5977,5978],{},"mergeRouteTranslationsWithRoot",[999,5980,5981,5984],{},[747,5982,5983],{},"deepMergeTranslationsRecursive",", which merges at every depth",[984,5986,5987,5989,5994],{},[999,5988,266],{},[999,5990,5991,5803],{},[747,5992,5993],{},"deepMergeTranslations",[999,5995,5996,5998],{},[747,5997,5983],{},". The old name stopped at two levels until this release",[984,6000,6001,6003,6008],{},[999,6002,266],{},[999,6004,6005,5803],{},[747,6006,6007],{},"applyAutoDetectLanguage",[999,6009,6010],{},[747,6011,6012],{},"hasExplicitPreference || !autoDetect ? locale : detectLocaleFromAcceptLanguage(header, validLocales) ?? locale",[984,6014,6015,6017,6026],{},[999,6016,266],{},[999,6018,6019,6022,6023],{},[747,6020,6021],{},"LocaleHeadLink"," is a union by ",[747,6024,6025],{},"rel",[999,6027,6028,6029,6031,6032,6035,6036,6038],{},"Code that builds one with a free ",[747,6030,6025],{},", or an ",[747,6033,6034],{},"alternate"," with no ",[747,6037,1702],{},", no longer compiles",[4459,6040,6042,780,6044],{"id":6041},"i18n-micropath-strategy-i18n-microroute-strategy",[747,6043,644],{},[747,6045,656],{},[978,6047,6048,6058],{},[981,6049,6050],{},[984,6051,6052,6054,6056],{},[987,6053,4476],{},[987,6055,4479],{},[987,6057,4482],{},[994,6059,6060,6076,6093,6108,6126,6196,6212],{},[984,6061,6062,6064,6073],{},[999,6063,230],{},[999,6065,6066],{},[757,6067,6068,3715,6070,6072],{},[747,6069,956],{},[747,6071,960],{},". An old JS call returns a wrong result, with no error",[999,6074,6075],{},"Drop the first argument",[984,6077,6078,6080,6090],{},[999,6079,230],{},[999,6081,6082,6085,6086,6089],{},[747,6083,6084],{},"localeRoute(locale, routeOrPath)"," lost its third parameter, ",[747,6087,6088],{},"getRouteBaseName(route)"," its second. Both were ignored",[999,6091,6092],{},"Drop them",[984,6094,6095,6097,6103],{},[999,6096,230],{},[999,6098,6099,6102],{},[747,6100,6101],{},"Strategy"," alias removed",[999,6104,1027,6105],{},[747,6106,6107],{},"I18nPathStrategy",[984,6109,6110,6112,6118],{},[999,6111,230],{},[999,6113,6114,6117],{},[747,6115,6116],{},"createPathStrategy"," no longer builds absolute URLs",[999,6119,1027,6120,6123,6124],{},[747,6121,6122],{},"new DomainPathStrategy(ctx)"," when locales have ",[747,6125,884],{},[984,6127,6128,6130,6190],{},[999,6129,230],{},[999,6131,5950,6132,780,6135,780,6138,780,6141,6144,6145,780,6148,780,6151,780,6154,780,6157,780,6160,6163,6164,780,6167,5236,6170,6173,6174,780,6177,780,6179,780,6182,815,6184,2139,6187],{},[747,6133,6134],{},"\u002Fprefix",[747,6136,6137],{},"\u002Fno-prefix",[747,6139,6140],{},"\u002Fprefix-except-default",[747,6142,6143],{},"\u002Fprefix-and-default"," removed. Gone from the root: ",[747,6146,6147],{},"BasePathStrategy",[747,6149,6150],{},"analyzeRoute",[747,6152,6153],{},"getRouteBaseName",[747,6155,6156],{},"buildLocalizedName",[747,6158,6159],{},"isIndexRouteName",[747,6161,6162],{},"resolvePathWithParams",". Gone from strategies: ",[747,6165,6166],{},"getRedirect",[747,6168,6169],{},"getCanonicalPath",[747,6171,6172],{},"get*"," config getters. The context drops ",[747,6175,6176],{},"globalLocaleRoutes",[747,6178,1122],{},[747,6180,6181],{},"routesLocaleLinks",[747,6183,1119],{},[747,6185,6186],{},"RouterAdapter",[747,6188,6189],{},"getRoutes",[999,6191,6192,6193,6195],{},"Build from ",[747,6194,6116],{}," or the two classes",[984,6197,6198,6200,6206],{},[999,6199,242],{},[999,6201,6202,6205],{},[747,6203,6204],{},"isInternalPath"," is no longer re-exported",[999,6207,6208,6209],{},"Import it from ",[747,6210,6211],{},"@i18n-micro\u002Futils\u002Fapp-path",[984,6213,6214,6216,6254],{},[999,6215,242],{},[999,6217,6218,6219,780,6222,780,6225,780,6228,780,6231,6234,6235,792,6238,6241,6242,780,6245,780,6248,780,6251],{},"Helper exports gone: ",[747,6220,6221],{},"buildFullPath",[747,6223,6224],{},"buildFullPathNoPrefix",[747,6226,6227],{},"buildRouteName",[747,6229,6230],{},"extractLocalizedPaths",[747,6232,6233],{},"isLocalizationDisabledForPage"," and others. ",[747,6236,6237],{},"filesLocaleRoutes",[747,6239,6240],{},"fallbackRedirectComponentPath"," removed. New: ",[747,6243,6244],{},"generateRoutes",[747,6246,6247],{},"Rules",[747,6249,6250],{},"nameOfPath",[747,6252,6253],{},"routeKey",[999,6255,1027,6256,1017,6259],{},[747,6257,6258],{},"RouteGenerator",[747,6260,6244],{},[4459,6262,6264,780,6266,780,6268],{"id":6263},"i18n-microtest-utils-i18n-microtypes-generator-i18n-microdevtools-ui",[747,6265,668],{},[747,6267,676],{},[747,6269,632],{},[978,6271,6272,6282],{},[981,6273,6274],{},[984,6275,6276,6278,6280],{},[987,6277,4476],{},[987,6279,4479],{},[987,6281,4482],{},[994,6283,6284,6313,6330,6342,6361,6409,6443,6475,6495],{},[984,6285,6286,6288,6310],{},[999,6287,254],{},[999,6289,6290,6291,3197,6293,6296,6297,3715,6300,780,6302,6305,6306,6309],{},"The mock is a ",[747,6292,5833],{},[747,6294,6295],{},"tc('a', 1.5)"," takes the last form, ",[747,6298,6299],{},"td('nope')",[747,6301,3108],{},[747,6303,6304],{},"tdr"," follows the active locale, ",[747,6307,6308],{},"t(miss, undefined, '')"," is the key, root keys answer on a route, a miss no longer logs",[999,6311,6312],{},"Fix tests that pinned what the app never did",[984,6314,6315,6317,6325],{},[999,6316,254],{},[999,6318,6319,792,6322,5966],{},[747,6320,6321],{},"settRouteName",[747,6323,6324],{},"$settRouteName",[999,6326,1027,6327],{},[747,6328,6329],{},"setRouteName",[984,6331,6332,6334,6340],{},[999,6333,254],{},[999,6335,6336,6337,6339],{},"The strategy fake's ",[747,6338,948],{}," follows the new signature",[999,6341,6075],{},[984,6343,6344,6346,6359],{},[999,6345,254],{},[999,6347,6348,6351,6352,6355,6356,5966],{},[747,6349,6350],{},"isolated"," is gone from ",[747,6353,6354],{},"createI18nTestContext"," (every context always was); ",[747,6357,6358],{},".\u002Fpublish-smoke",[999,6360,4521],{},[984,6362,6363,6365,6397],{},[999,6364,262],{},[999,6366,6367,6370,6371,780,6374,780,6377,815,6380,780,6383,6386,6387,792,6390,6393,6394,6396],{},[747,6368,6369],{},"I18nTypesPlugin(options)"," is a plain Vite and Rollup plugin: no ",[747,6372,6373],{},".vite()",[747,6375,6376],{},".webpack()",[747,6378,6379],{},".esbuild()",[747,6381,6382],{},"flattenKeys",[747,6384,6385],{},"isPlainTranslationObject"," removed; ",[747,6388,6389],{},"getTypesString",[747,6391,6392],{},"generateTypes"," are sync; ",[747,6395,5112],{}," may be an array",[999,6398,6399,1521,6402,6405,6406,6408],{},[747,6400,6401],{},"I18nTypesPlugin.vite(o)",[747,6403,6404],{},"I18nTypesPlugin(o)","; for webpack or esbuild call ",[747,6407,6392],{}," in a script",[984,6410,6411,6413,6441],{},[999,6412,262],{},[999,6414,6415,6416,6418,6419,6422,6423,6426,6427,815,6430,6433,6434,792,6437,6440],{},"Keys are what ",[747,6417,5381],{}," reads: object paths added, ",[747,6420,6421],{},"__proto__"," and files outside the locale layout dropped, values typed by their JSON. The Nuxt module reads ",[747,6424,6425],{},"i18n.translationDir",", inline options, layers and ",[747,6428,6429],{},"additionalTranslationDirs",[747,6431,6432],{},"@nuxt\u002Fkit"," is an optional peer, ",[747,6435,6436],{},"@nuxt\u002Fschema",[747,6438,6439],{},"vite"," are new optional peers",[999,6442,4521],{},[984,6444,6445,6447,6473],{},[999,6446,222],{},[999,6448,6449,792,6452,6455,6456,6459,6460,2139,6463,6466,6467,815,6470,6472],{},[747,6450,6451],{},"\u002Ffiles",[747,6453,6454],{},"\u002Ffile"," are replaced by ",[747,6457,6458],{},"\u002Ftranslations","; a cross-site or foreign-host request is a 403, ",[747,6461,6462],{},"\u002Fsave",[747,6464,6465],{},"application\u002Fjson","; updates come over Vite's socket, no 2s poll; Astro uses ",[747,6468,6469],{},"i18nDevToolsIntegration",[747,6471,6439],{}," is an optional peer",[999,6474,4521],{},[984,6476,6477,6479,6488],{},[999,6478,222],{},[999,6480,6481,6484,6485,6487],{},[747,6482,6483],{},"createBridge"," takes a ",[747,6486,5289],{}," option; a failed save to a reachable endpoint throws and rolls back",[999,6489,5763,6490,6492,6493],{},[747,6491,5289],{}," if you changed the plugin's ",[747,6494,5289],{},[984,6496,6497,6499,6511],{},[999,6498,222],{},[999,6500,6501,6503,6504,6507,6508,6510],{},[747,6502,6462],{}," accepts only an existing ",[747,6505,6506],{},".json"," inside ",[747,6509,5112],{}," and no longer creates files",[999,6512,6513],{},"Create new locale files yourself",[770,6515,6517],{"id":6516},"from-v2-to-v3","From v2 to v3",[798,6519,6521],{"id":6520},"removed-options","Removed options",[6523,6524,6529],"pre",{"className":6525,"code":6526,"language":6527,"meta":6528,"style":6528},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight"," i18n: {\n-  includeDefaultLocaleRoute: true,\n+  strategy: 'prefix',\n-  fallbackRedirectComponentPath: '~\u002Fcomponents\u002FMyRedirect.vue',\n-  experimental: { hmr: true, previousPageFallback: true },\n+  hmr: true,\n }\n","diff","",[747,6530,6531,6538,6544,6550,6556,6562,6568],{"__ignoreMap":6528},[6532,6533,6535],"span",{"class":6534,"line":353},"line",[6532,6536,6537],{}," i18n: {\n",[6532,6539,6541],{"class":6534,"line":6540},2,[6532,6542,6543],{},"-  includeDefaultLocaleRoute: true,\n",[6532,6545,6547],{"class":6534,"line":6546},3,[6532,6548,6549],{},"+  strategy: 'prefix',\n",[6532,6551,6553],{"class":6534,"line":6552},4,[6532,6554,6555],{},"-  fallbackRedirectComponentPath: '~\u002Fcomponents\u002FMyRedirect.vue',\n",[6532,6557,6559],{"class":6534,"line":6558},5,[6532,6560,6561],{},"-  experimental: { hmr: true, previousPageFallback: true },\n",[6532,6563,6565],{"class":6534,"line":6564},6,[6532,6566,6567],{},"+  hmr: true,\n",[6532,6569,6571],{"class":6534,"line":6570},7,[6532,6572,6573],{}," }\n",[833,6575,6576,6589,6596,6605],{},[806,6577,6578,3715,6581,2544,6584,6586,6587,768],{},[747,6579,6580],{},"includeDefaultLocaleRoute: true",[747,6582,6583],{},"strategy: 'prefix'",[747,6585,2122],{}," is the default ",[747,6588,1340],{},[806,6590,6591,6593,6594,768],{},[747,6592,6240],{}," is gone: redirects happen on the server before render and in a client route middleware. Custom redirect logic goes into a plugin that sets the locale, see ",[766,6595,67],{"href":68},[806,6597,6598,6601,6602,6604],{},[747,6599,6600],{},"experimental.hmr"," is the root ",[747,6603,1113],{}," option (on by default).",[806,6606,6607,6610],{},[747,6608,6609],{},"previousPageFallback"," is gone: the leaving page's keys resolve until its transition ends, with no option.",[798,6612,6614],{"id":6613},"locale-state","Locale state",[743,6616,1027,6617,6619,6620,792,6623,4447],{},[747,6618,4149],{}," instead of ",[747,6621,6622],{},"useState('i18n-locale')",[747,6624,6625],{},"useCookie('user-locale')",[6523,6627,6629],{"className":6525,"code":6628,"language":6527,"meta":6528,"style":6528},"- useState('i18n-locale').value = 'fr'\n- useCookie('user-locale').value = 'fr'\n+ useI18nLocale().setLocale('fr') \u002F\u002F state and cookie together\n",[747,6630,6631,6636,6641],{"__ignoreMap":6528},[6532,6632,6633],{"class":6534,"line":353},[6532,6634,6635],{},"- useState('i18n-locale').value = 'fr'\n",[6532,6637,6638],{"class":6534,"line":6540},[6532,6639,6640],{},"- useCookie('user-locale').value = 'fr'\n",[6532,6642,6643],{"class":6534,"line":6546},[6532,6644,6645],{},"+ useI18nLocale().setLocale('fr') \u002F\u002F state and cookie together\n",[798,6647,6649],{"id":6648},"config-at-runtime","Config at runtime",[743,6651,6652,6653,4447],{},"Read the config, runtime overrides included, with ",[747,6654,4164],{},[6523,6656,6658],{"className":6525,"code":6657,"language":6527,"meta":6528,"style":6528},"- const cookieName = useRuntimeConfig().public.i18nConfig?.localeCookie\n+ const { $getI18nConfig } = useNuxtApp()\n+ const cookieName = $getI18nConfig().localeCookie\n",[747,6659,6660,6665,6670],{"__ignoreMap":6528},[6532,6661,6662],{"class":6534,"line":353},[6532,6663,6664],{},"- const cookieName = useRuntimeConfig().public.i18nConfig?.localeCookie\n",[6532,6666,6667],{"class":6534,"line":6540},[6532,6668,6669],{},"+ const { $getI18nConfig } = useNuxtApp()\n",[6532,6671,6672],{"class":6534,"line":6546},[6532,6673,6674],{},"+ const cookieName = $getI18nConfig().localeCookie\n",[798,6676,6678],{"id":6677},"internal-type-aliases","Internal type aliases",[743,6680,6681,6682,6685,6686,6689,6690,6693],{},"If your IDE or ",[747,6683,6684],{},"vue-tsc"," cannot resolve ",[747,6687,6688],{},"#i18n-internal\u002F*"," imports, map them in your ",[747,6691,6692],{},"package.json",". Nuxt resolves them at build time, so this is rarely needed:",[6523,6695,6699],{"className":6696,"code":6697,"language":6698,"meta":6528,"style":6528},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"imports\": {\n    \"#i18n-internal\u002Fplural\": \"nuxt-i18n-micro\u002Finternals\",\n    \"#i18n-internal\u002Fstrategy\": \"nuxt-i18n-micro\u002Finternals\",\n    \"#i18n-internal\u002Fconfig\": \"nuxt-i18n-micro\u002Finternals\"\n  }\n}\n","json",[747,6700,6701,6707,6724,6749,6768,6786,6791],{"__ignoreMap":6528},[6532,6702,6703],{"class":6534,"line":353},[6532,6704,6706],{"class":6705},"sMK4o","{\n",[6532,6708,6709,6712,6716,6719,6721],{"class":6534,"line":6540},[6532,6710,6711],{"class":6705},"  \"",[6532,6713,6715],{"class":6714},"spNyl","imports",[6532,6717,6718],{"class":6705},"\"",[6532,6720,4447],{"class":6705},[6532,6722,6723],{"class":6705}," {\n",[6532,6725,6726,6729,6733,6735,6737,6740,6744,6746],{"class":6534,"line":6546},[6532,6727,6728],{"class":6705},"    \"",[6532,6730,6732],{"class":6731},"sBMFI","#i18n-internal\u002Fplural",[6532,6734,6718],{"class":6705},[6532,6736,4447],{"class":6705},[6532,6738,6739],{"class":6705}," \"",[6532,6741,6743],{"class":6742},"sfazB","nuxt-i18n-micro\u002Finternals",[6532,6745,6718],{"class":6705},[6532,6747,6748],{"class":6705},",\n",[6532,6750,6751,6753,6756,6758,6760,6762,6764,6766],{"class":6534,"line":6552},[6532,6752,6728],{"class":6705},[6532,6754,6755],{"class":6731},"#i18n-internal\u002Fstrategy",[6532,6757,6718],{"class":6705},[6532,6759,4447],{"class":6705},[6532,6761,6739],{"class":6705},[6532,6763,6743],{"class":6742},[6532,6765,6718],{"class":6705},[6532,6767,6748],{"class":6705},[6532,6769,6770,6772,6775,6777,6779,6781,6783],{"class":6534,"line":6558},[6532,6771,6728],{"class":6705},[6532,6773,6774],{"class":6731},"#i18n-internal\u002Fconfig",[6532,6776,6718],{"class":6705},[6532,6778,4447],{"class":6705},[6532,6780,6739],{"class":6705},[6532,6782,6743],{"class":6742},[6532,6784,6785],{"class":6705},"\"\n",[6532,6787,6788],{"class":6534,"line":6564},[6532,6789,6790],{"class":6705},"  }\n",[6532,6792,6793],{"class":6534,"line":6570},[6532,6794,6795],{"class":6705},"}\n",[770,6797,6799],{"id":6798},"related","Related",[6801,6802,6803,6807,6810],"card-group",{},[6804,6805],"card",{"icon":6806,"title":57,"to":58},"i-lucide-book-open",[6804,6808],{"icon":6809,"title":189,"to":190},"i-lucide-braces",[6804,6811],{"icon":6812,"title":6813,"to":6814,"target":6815},"i-lucide-external-link","Changelog","https:\u002F\u002Fgithub.com\u002Fs00d\u002Fnuxt-i18n-micro\u002Fblob\u002Fmain\u002FCHANGELOG.md","_blank",[4730,6817,6818],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":6528,"searchDepth":6540,"depth":6540,"links":6820},[6821,6840,6846],{"id":772,"depth":6540,"text":773,"children":6822},[6823,6824,6825,6826,6827,6829,6830,6831,6832,6833,6834,6836,6837,6838,6839],{"id":800,"depth":6546,"text":801},{"id":1323,"depth":6546,"text":1324},{"id":1772,"depth":6546,"text":1773},{"id":2066,"depth":6546,"text":1099},{"id":2269,"depth":6546,"text":6828},"Navigation and $switchLocale",{"id":2495,"depth":6546,"text":2496},{"id":2705,"depth":6546,"text":911},{"id":2940,"depth":6546,"text":2941},{"id":3076,"depth":6546,"text":3077},{"id":697,"depth":6546,"text":304},{"id":3854,"depth":6546,"text":6835},"\u003Ci18n-switcher> and \u003Ci18n-link>",{"id":4018,"depth":6546,"text":4019},{"id":4169,"depth":6546,"text":4170},{"id":4451,"depth":6546,"text":791},{"id":5769,"depth":6546,"text":796},{"id":6516,"depth":6540,"text":6517,"children":6841},[6842,6843,6844,6845],{"id":6520,"depth":6546,"text":6521},{"id":6613,"depth":6546,"text":6614},{"id":6648,"depth":6546,"text":6649},{"id":6677,"depth":6546,"text":6678},{"id":6798,"depth":6540,"text":6799},"What to do when you upgrade nuxt-i18n-micro: the major release after 3.30.3, and v2 to v3.","md","2026-11-04T12:20:38+05:00",null,{"outline":6852},[6540,6546],{"order":23,"group":11},{"title":20,"description":6847},"L0hCEMYJn13jtfhRDrrPnwKP_atB-4kP9cpHrqf4BF8",[6857,6859],{"title":15,"path":16,"description":6858},"Map @nuxtjs\u002Fi18n options, composables and translation files to nuxt-i18n-micro.",{"title":25,"path":26,"description":6860},"Short answers to common nuxt-i18n-micro problems, each with a link to the page that covers it.",1793790723295]