[{"data":1,"prerenderedAt":1439},["ShallowReactive",2],{"navigation":3,"v3-navigation":406,"\u002Fcontributing\u002Farchitecture":733,"\u002Fcontributing\u002Farchitecture-surround":1434},[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":327,"body":735,"description":1424,"extension":1425,"lastUpdated":1426,"links":1427,"meta":1428,"navigation":1431,"path":328,"seo":1432,"stem":329,"__hash__":1433},"docs\u002Fcontributing\u002Farchitecture.md",{"type":736,"value":737,"toc":1414},"minimark",[738,742,764,768,775,779,936,977,981,1132,1136,1283,1286,1289,1395,1399],[739,740,327],"h1",{"id":741},"architecture",[743,744,745,746,750,751,754,755,760,761,763],"p",{},"This page follows a translation from the JSON file in ",[747,748,749],"code",{},"locales\u002F"," to ",[747,752,753],{},"$t()"," on screen, and names the file behind each step. Read it before you change the build, the server loader, the payload route or the client storage. App authors do not need it: the supported knobs are listed under ",[756,757,759],"a",{"href":758},"#public-surface","Public surface",", and the ",[756,762,5],{"href":31}," explains them.",[765,766,136],"h2",{"id":767},"overview",[743,769,770],{},[771,772],"img",{"alt":773,"src":774},"Locale JSON files are built into a payload tree, stored in public\u002F on Node or in server assets on Edge, read by a server loader, then used by $t on the server and fetched for $t in the browser","\u002Fdiagrams\u002Ftranslation-pipeline.svg",[765,776,778],{"id":777},"build","Build",[780,781,782,795],"table",{},[783,784,785],"thead",{},[786,787,788,792],"tr",{},[789,790,791],"th",{},"Step",[789,793,794],{},"Source",[796,797,798,821,844,867,886,904],"tbody",{},[786,799,800,811],{},[801,802,803,804,807,808],"td",{},"Layers are read in order (extended layers first, the project last); ",[747,805,806],{},"additionalTranslationDirs"," before ",[747,809,810],{},"translationDir",[801,812,813,816,817,820],{},[747,814,815],{},"src\u002Fmodule.ts"," (",[747,818,819],{},"rootDirs",")",[786,822,823,836],{},[801,824,825,828,829,832,833],{},[747,826,827],{},"premerged"," (default): root + page + fallback chain merged into one ",[747,830,831],{},"{page}\u002F{locale}\u002Fdata.json"," per page and locale, in ",[747,834,835],{},".nuxt\u002Fi18n-merged",[801,837,838,816,841,820],{},[747,839,840],{},"src\u002Fbuild\u002Fbuild.ts",[747,842,843],{},"preMergeLocales",[786,845,846,856],{},[801,847,848,851,852,855],{},[747,849,850],{},"source",": a compact copy of the source files in ",[747,853,854],{},".nuxt\u002Fi18n-source",", merged per request at runtime",[801,857,858,816,860,863,864],{},[747,859,840],{},[747,861,862],{},"buildTranslationSourceLayers","), ",[747,865,866],{},"@i18n-micro\u002Futils\u002Fmerge-source",[786,868,869,879],{},[801,870,871,872,875,876,878],{},"Fallback chain: global ",[747,873,874],{},"fallbackLocale",", then each locale's ",[747,877,874],{}," link, then the locale",[801,880,881,816,883,820],{},[747,882,866],{},[747,884,885],{},"buildFallbackLocaleChain",[786,887,888,894],{},[801,889,890,893],{},[747,891,892],{},"dateBuild",": a hash of the translation files unless set",[801,895,896,816,898,863,901],{},[747,897,815],{},[747,899,900],{},"resolveDateBuild",[747,902,903],{},"src\u002Fbuild\u002Fpayload-stats.ts",[786,905,906,926],{},[801,907,908,909,912,913,863,916,919,920,863,923],{},"Templates: ",[747,910,911],{},"#build\u002Fi18n.strategy.mjs"," (public config + ",[747,914,915],{},"createI18nStrategy",[747,917,918],{},"i18n.config.mjs"," (private config, Nitro alias ",[747,921,922],{},"#i18n-internal\u002Fconfig",[747,924,925],{},"i18n.plural.mjs",[801,927,928,816,930,863,933],{},[747,929,815],{},[747,931,932],{},"registerI18nTemplates",[747,934,935],{},"src\u002Fplural-template.ts",[743,937,938,939,942,943,946,947,950,951,954,955,816,958,961,962,965,966,969,970,816,973,976],{},"Where the tree goes depends on the Nitro preset, decided in ",[747,940,941],{},"nitro:init",". A preset that serves ",[747,944,945],{},"public\u002F"," from disk (",[747,948,949],{},"node-server",") gets the tree copied to ",[747,952,953],{},"public\u002F\u003CapiBaseUrl>\u002F"," and reads it with ",[747,956,957],{},"readFile",[747,959,960],{},"src\u002Fruntime\u002Fserver\u002Fpayload-source.fs.ts","). Edge, function and ",[747,963,964],{},"serveStatic: \"inline\""," presets embed it as Nitro ",[747,967,968],{},"serverAssets"," under ",[747,971,972],{},"assets:i18n",[747,974,975],{},"payload-source.assets.ts","). Both readers reject paths that leave the payload root.",[765,978,980],{"id":979},"server","Server",[982,983,984,1030,1063,1092],"ul",{},[985,986,987,991,992,995,996,998,999,998,1002,1005,1006,1009,1010,1013,1014,1017,1018,1021,1022,1025,1026,1029],"li",{},[988,989,990],"strong",{},"Middleware"," ",[747,993,994],{},"src\u002Fruntime\u002Fserver\u002Fmiddleware\u002Fi18n.global.ts"," runs on every request except internals (",[747,997,182],{},", ",[747,1000,1001],{},"\u002F_nuxt",[747,1003,1004],{},"\u002F__*",", the payload route, static files). It detects the request locale once (",[747,1007,1008],{},"detectRequestLocale"," in ",[747,1011,1012],{},"server\u002Futils\u002Flocale-detector.ts",") and stores ",[747,1015,1016],{},"event.context.i18n = { locale, translations, load, config }",". ",[747,1019,1020],{},"translations"," is the ",[747,1023,1024],{},"index"," chunk when ",[747,1027,1028],{},"serverTranslationPreload"," is on.",[985,1031,1032,991,1035,816,1038,1041,1042,1045,1046,1049,1050,1052,1053,1055,1056,998,1059,1062],{},[988,1033,1034],{},"Loader",[747,1036,1037],{},"server\u002Futils\u002Fserver-loader.ts",[747,1039,1040],{},"loadTranslationsFromServer(locale, page)","): in dev it reads the live files on every call; with ",[747,1043,1044],{},"apiBaseServerHost"," it fetches the payload from that host; otherwise it reads through ",[747,1047,1048],{},"#i18n-internal\u002Fpayload-source"," (one file in ",[747,1051,827],{},", a runtime merge in ",[747,1054,850],{},"). A premerged page without its own folder shares the root entry, so made-up page names cannot add entries. With ",[747,1057,1058],{},"cacheStorage",[747,1060,1061],{},"server\u002Finternal\u002Fshared-cache.ts"," sits between the process cache and the source, unless the dictionaries are embedded and no host is set.",[985,1064,1065,991,1068,1071,1072,1075,1076,1079,1080,1083,1084,1087,1088,1091],{},[988,1066,1067],{},"Server cache",[747,1069,1070],{},"server\u002Finternal\u002Fserver-translation-cache.ts",": one LRU ",[747,1073,1074],{},"CacheControl"," per process on ",[747,1077,1078],{},"globalThis[Symbol.for('__NUXT_I18N_SERVER_CACHE_CC__')]",", at most ",[747,1081,1082],{},"cacheMaxSize"," entries (1000 when unset), ",[747,1085,1086],{},"cacheTtl"," from write. Entries hold the data and its pre-serialized JSON; concurrent loads of one key share one read. It is emptied on restart and, in dev, whenever a translation file changes (",[747,1089,1090],{},"translation-watcher.ts",").",[985,1093,1094,991,1097,1100,1101,1104,1105,1108,1109,1112,1113,1116,1117,1119,1120,1123,1124,1127,1128,1131],{},[988,1095,1096],{},"Route",[747,1098,1099],{},"server\u002Froutes\u002Fi18n.ts"," serves ",[747,1102,1103],{},"\u002F{apiBaseUrl}\u002F:page\u002F:locale\u002Fdata.json"," from the loader's pre-serialized JSON, 404 for a disabled or unknown locale. Outside dev, when ",[747,1106,1107],{},"httpCacheDuration"," is above 0, it sets ",[747,1110,1111],{},"public, max-age=\u003ChttpCacheDuration>, immutable"," only when the request's ",[747,1114,1115],{},"?v="," equals ",[747,1118,892],{},"; otherwise ",[747,1121,1122],{},"public, max-age=0, must-revalidate",". At ",[747,1125,1126],{},"httpCacheDuration: 0"," it sends no ",[747,1129,1130],{},"Cache-Control"," header.",[765,1133,1135],{"id":1134},"client-and-ssr-runtime","Client and SSR runtime",[982,1137,1138,1155,1183,1208,1230,1247,1262],{},[985,1139,1140,991,1143,1146,1147,1150,1151,1154],{},[988,1141,1142],{},"Loader plugin",[747,1144,1145],{},"src\u002Fruntime\u002Fplugins\u002F01.plugin.ts"," resolves the initial locale, configures storage, loads the first chunk and registers the helpers. During SSR the chunk comes from ",[747,1148,1149],{},"event.context.i18n.load"," (no HTTP); dictionaries are never written into the HTML payload. The server adds a ",[747,1152,1153],{},"\u003Clink rel=\"preload\" as=\"fetch\">"," for the chunk the browser will fetch while hydrating.",[985,1156,1157,991,1162,1165,1166,1168,1169,1172,1173,1176,1177,1179,1180,1182],{},[988,1158,1159],{},[747,1160,1161],{},"TranslationStorage",[747,1163,1164],{},"src\u002Fruntime\u002Futils\u002Fstorage.ts",": a module-level instance whose ",[747,1167,1074],{}," lives on ",[747,1170,1171],{},"globalThis[Symbol.for('__NUXT_I18N_STORAGE_CC__')]",", keyed ",[747,1174,1175],{},"locale:routeName",". On the server a chunk's root is frozen in place, because every request shares it; the browser stores the object it fetched. Bounded by ",[747,1178,1082],{}," (1000 on the server when unset, unbounded in the browser), expired by ",[747,1181,1086],{},".",[985,1184,1185,991,1190,1193,1194,1197,1198,1200,1201,1204,1205,1207],{},[988,1186,1187],{},[747,1188,1189],{},"NuxtI18n",[747,1191,1192],{},"src\u002Fruntime\u002Futils\u002Fnuxt-i18n.ts"," (extends ",[747,1195,1196],{},"BaseI18n"," from ",[747,1199,628],{},"): one per app. It holds the chunk map (",[747,1202,1203],{},"storage.translations",", FIFO-evicted with ",[747,1206,1082],{},"), the active dictionary, and the outgoing dictionary.",[985,1209,1210,1213,1214,1217,1218,1221,1222,1225,1226,1229],{},[988,1211,1212],{},"Navigation"," does not merge. ",[747,1215,1216],{},"applySwitchContext"," installs the new chunk as the active dictionary; on a same-locale navigation the old one stays as a fallback layer so the leaving page still renders its keys. ",[747,1219,1220],{},"finishTransition"," drops it when the leaving page's element leaves the document, watched from the commit, or on ",[747,1223,1224],{},"page:finish"," for a page with no element. A parent still in ",[747,1227,1228],{},"to.matched"," keeps it until the next navigation.",[985,1231,1232,1235,1236,998,1239,1242,1243,1246],{},[988,1233,1234],{},"Patches merge",": ",[747,1237,1238],{},"$mergeTranslations",[747,1240,1241],{},"$loadPageTranslations"," and ",[747,1244,1245],{},"i18n:register"," deep-merge into the stored chunk and, when it is active, into the dictionary. Stored trees are never edited in place.",[985,1248,1249,1254,1255,816,1258,1261],{},[988,1250,1251],{},[747,1252,1253],{},"NuxtTranslationLoader"," dedupes in-flight loads per key and keeps a switch generation, so a slow load cannot overwrite a newer navigation. ",[747,1256,1257],{},"reload()",[747,1259,1260],{},"$clearCache",", dev HMR) clears both caches and re-applies the current chunk without blanking the screen.",[985,1263,1264,1267,1268,1270,1271,1274,1275,1278,1279,1282],{},[988,1265,1266],{},"Dev HMR",": a Vite plugin in ",[747,1269,815],{}," swallows updates of translation files and sends ",[747,1272,1273],{},"i18n-micro:update","; the client plugin from ",[747,1276,1277],{},"src\u002Fhmr-plugin.ts"," calls ",[747,1280,1281],{},"$clearCache()",". The dev server reads live files, so nothing on the server needs invalidating.",[765,1284,759],{"id":1285},"public-surface",[743,1287,1288],{},"Everything above is internal and may change in any release. Apps may rely on:",[780,1290,1291,1301],{},[783,1292,1293],{},[786,1294,1295,1298],{},[789,1296,1297],{},"Need",[789,1299,1300],{},"Use",[796,1302,1303,1315,1336,1353,1370,1385],{},[786,1304,1305,1308],{},[801,1306,1307],{},"Reload translations in the browser",[801,1309,1310],{},[756,1311,1313],{"href":1312},"\u002Fapi\u002Fmethods#clearcache",[747,1314,1281],{},[786,1316,1317,1320],{},[801,1318,1319],{},"Add or patch translations at runtime",[801,1321,1322,998,1327,998,1332],{},[756,1323,1325],{"href":1324},"\u002Fapi\u002Fmethods#mergetranslations",[747,1326,1238],{},[756,1328,1330],{"href":1329},"\u002Fapi\u002Fmethods#loadpagetranslations",[747,1331,1241],{},[756,1333,1334],{"href":202},[747,1335,1245],{},[786,1337,1338,1341],{},[801,1339,1340],{},"Bound or expire the caches",[801,1342,1343,998,1348],{},[756,1344,1346],{"href":1345},"\u002Fapi\u002Fmodule-options#cachemaxsize",[747,1347,1082],{},[756,1349,1351],{"href":1350},"\u002Fapi\u002Fmodule-options#cachettl",[747,1352,1086],{},[786,1354,1355,1358],{},[801,1356,1357],{},"HTTP caching of payloads",[801,1359,1360,998,1365],{},[756,1361,1363],{"href":1362},"\u002Fapi\u002Fmodule-options#httpcacheduration",[747,1364,1107],{},[756,1366,1368],{"href":1367},"\u002Fapi\u002Fmodule-options#datebuild",[747,1369,892],{},[786,1371,1372,1375],{},[801,1373,1374],{},"Where payloads are written",[801,1376,1377,998,1383],{},[756,1378,1380],{"href":1379},"\u002Fapi\u002Fmodule-options#translationpayloads",[747,1381,1382],{},"translationPayloads",[756,1384,88],{"href":89},[786,1386,1387,1390],{},[801,1388,1389],{},"Translations in a Nitro handler",[801,1391,1392],{},[756,1393,1394],{"href":47},"Server routes",[765,1396,1398],{"id":1397},"related","Related",[1400,1401,1402,1407,1409,1412],"card-group",{},[1403,1404],"card",{"icon":1405,"title":320,"to":1406},"i-lucide-git-pull-request","\u002Fcontributing\u002F",[1403,1408],{"icon":1405,"title":331,"to":332},[1403,1410],{"icon":1411,"title":30,"to":31},"i-lucide-book-open",[1403,1413],{"icon":1411,"title":474,"to":95},{"title":1415,"searchDepth":1416,"depth":1416,"links":1417},"",2,[1418,1419,1420,1421,1422,1423],{"id":767,"depth":1416,"text":136},{"id":777,"depth":1416,"text":778},{"id":979,"depth":1416,"text":980},{"id":1134,"depth":1416,"text":1135},{"id":1285,"depth":1416,"text":759},{"id":1397,"depth":1416,"text":1398},"How the Nuxt module builds, stores, serves and loads translation payloads, and where each part lives in the source.","md","2026-11-04T00:40:16+04:00",null,{"outline":1429},[1416,1430],3,{"order":18},{"title":327,"description":1424},"13NE-bmHyDfzZKyj8ENG1ysIXwe6xzRhBQiwZaMrN2I",[1435,1437],{"title":320,"path":321,"description":1436},"Set up the nuxt-i18n-micro monorepo, run the playground and the checks, version packages and open a pull request.",{"title":331,"path":332,"description":1438},"How the nuxt-i18n-micro repo is tested: unit, integration and e2e projects, shared fixtures, recipes, isolated builds and mutation testing.",1793790701953]