[{"data":1,"prerenderedAt":3639},["ShallowReactive",2],{"navigation":3,"v3-navigation":406,"\u002Fguide\u002Fdeployment":733,"\u002Fguide\u002Fdeployment-surround":3634},[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":88,"body":735,"description":3625,"extension":3626,"lastUpdated":3627,"links":3628,"meta":3629,"navigation":3631,"path":89,"seo":3632,"stem":90,"__hash__":3633},"docs\u002Fguide\u002Fdeployment.md",{"type":736,"value":737,"toc":3597},"minimark",[738,742,746,761,773,778,790,808,825,829,861,888,907,917,925,928,943,963,967,973,1034,1041,1053,1173,1182,1187,1231,1234,1276,1283,1288,1292,1305,1328,1332,1346,1352,1401,1421,1428,1440,1507,1559,1585,1616,1620,1731,1734,1766,1791,1817,1828,1848,1860,1864,1873,1891,1902,1905,1909,1912,1962,1965,2005,2012,2023,2049,2053,2080,2094,2119,2143,2146,2284,2307,2329,2332,2335,2338,2359,2362,2531,2569,2587,2595,2597,2611,2682,2746,2812,2816,2839,2842,2849,2895,2934,2938,2952,2989,3020,3026,3030,3046,3049,3103,3130,3133,3138,3142,3151,3157,3161,3164,3232,3292,3344,3347,3350,3405,3566,3572,3576,3593],[739,740,88],"h1",{"id":741},"deployment",[743,744,745],"p",{},"The module works with any Nitro preset without extra config: it picks where translation files live from the preset you build for. Defaults are right for most apps; read the section for your platform. This page explains:",[747,748,749,758],"ul",{},[750,751,752,753,757],"li",{},"what ends up in ",[754,755,756],"code",{},".output\u002F"," and which headers the payloads get;",[750,759,760],{},"what to change for static hosting, large catalogs, a sub-path, a proxy or a CDN.",[762,763,764],"note",{},[743,765,766,767,772],{},"Deployed and checked on real hosts: Cloudflare Workers and Pages, Vercel and Vercel Edge, Netlify and Netlify Edge, Cloud Run and Deno Deploy, each with what ",[768,769,771],"a",{"href":770},"#platforms","Platforms"," lists. The other presets were built and run locally.",[774,775,777],"h2",{"id":776},"how-translations-are-delivered","How translations are delivered",[743,779,780,781,784,785,789],{},"At build time the module turns ",[754,782,783],{},"locales\u002F"," (all layers merged) into ",[786,787,788],"strong",{},"payloads",": one JSON file per page and locale. Two consumers read them:",[747,791,792,798],{},[750,793,794,797],{},[786,795,796],{},"SSR"," loads the payload of the rendered page in-process — no HTTP request, and the dictionary is not embedded in the HTML.",[750,799,800,803,804,807],{},[786,801,802],{},"The browser"," fetches ",[754,805,806],{},"\u002F_locales\u002F\u003Cpage>\u002F\u003Clocale>\u002Fdata.json?v=\u003CdateBuild>"," on hydration and on navigation.",[743,809,810,813,814,820,821,824],{},[754,811,812],{},"_locales"," is ",[768,815,817],{"href":816},"\u002Fapi\u002Fmodule-options#apibaseurl",[754,818,819],{},"apiBaseUrl",". The built-in server route answers that URL; the static copy in ",[754,822,823],{},"public\u002F"," answers it without a server.",[774,826,828],{"id":827},"node-server","Node server",[830,831,836],"pre",{"className":832,"code":833,"language":834,"meta":835,"style":835},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx nuxi build\nnode .output\u002Fserver\u002Findex.mjs\n","bash","",[754,837,838,853],{"__ignoreMap":835},[839,840,842,846,850],"span",{"class":841,"line":353},"line",[839,843,845],{"class":844},"sBMFI","npx",[839,847,849],{"class":848},"sfazB"," nuxi",[839,851,852],{"class":848}," build\n",[839,854,856,858],{"class":841,"line":855},2,[839,857,226],{"class":844},[839,859,860],{"class":848}," .output\u002Fserver\u002Findex.mjs\n",[743,862,863,864,866,867,870,871,870,874,877,878,880,881,883,884,887],{},"With ",[754,865,827],{}," (the default preset), ",[754,868,869],{},"node-cluster",", ",[754,872,873],{},"bun",[754,875,876],{},"deno-server"," or any other preset that serves ",[754,879,823],{}," from disk, with ",[754,882,823],{}," next to the ",[754,885,886],{},"server\u002F"," folder:",[747,889,890,897,904],{},[750,891,892,893,896],{},"payloads are copied to ",[754,894,895],{},".output\u002Fpublic\u002F_locales\u002F\u003Cpage>\u002F\u003Clocale>\u002Fdata.json",";",[750,898,899,900,903],{},"SSR reads them from that folder with ",[754,901,902],{},"fs"," (nothing is bundled into the server);",[750,905,906],{},"the browser gets them as static files, or from the server route.",[743,908,909,910,912,913,916],{},"Deploy the whole ",[754,911,756],{}," directory. The module needs Node 20 or newer, and Nuxt has its own minimum: Nuxt 4.5 declares ",[754,914,915],{},"^22.19.0 || ^24.11.0 || >=26.0.0",".",[743,918,919,920,924],{},"A process under steady load can hold much more memory than its live heap. See ",[768,921,923],{"href":922},"\u002Fguide\u002Fperformance#memory-on-a-node-server","Memory on a Node server"," before you set a container limit.",[743,926,927],{},"With another layout, the module embeds the payloads as described in the next section. That covers:",[747,929,930,937],{},[750,931,932,933,936],{},"a custom ",[754,934,935],{},"nitro.output.publicDir",", which the build reads once;",[750,938,939,942],{},[754,940,941],{},"serveStatic: true"," on a preset that keeps static files elsewhere.",[944,945,946],"warning",{},[743,947,948,949,951,952,955,956,958,959,962],{},"If a build reads ",[754,950,823],{}," and the folder does not reach the server, as with ",[754,953,954],{},"aws-lambda"," and ",[754,957,941],{},", the server logs one error and pages show raw keys. Set ",[754,960,961],{},"nitro.serveStatic: false"," to embed the payloads.",[774,964,966],{"id":965},"serverless-and-edge","Serverless and Edge",[743,968,969,970,972],{},"These presets cannot read ",[754,971,823],{}," at runtime:",[747,974,975,1007,1025],{},[750,976,977,978,980,981,870,984,870,987,870,989,870,992,870,995,870,998,870,1001,870,1004,896],{},"function presets that ship ",[754,979,823],{}," to a CDN or do not serve it: ",[754,982,983],{},"vercel",[754,985,986],{},"netlify",[754,988,954],{},[754,990,991],{},"aws-amplify",[754,993,994],{},"azure-swa",[754,996,997],{},"firebase",[754,999,1000],{},"stormkit",[754,1002,1003],{},"zeabur",[754,1005,1006],{},"node-listener",[750,1008,1009,1010,870,1013,870,1016,870,1019,870,1022,896],{},"Edge presets without a file system: ",[754,1011,1012],{},"cloudflare-module",[754,1014,1015],{},"cloudflare-pages",[754,1017,1018],{},"vercel-edge",[754,1020,1021],{},"netlify-edge",[754,1023,1024],{},"deno_deploy",[750,1026,1027,1030,1031,916],{},[754,1028,1029],{},"serveStatic: 'inline'",", such as ",[754,1032,1033],{},"winterjs",[743,1035,1036,1037,1040],{},"There the module embeds the payloads into the server bundle as Nitro server assets (",[754,1038,1039],{},"assets:i18n",") and still writes the public copy for the browser.",[743,1042,1043,1044,1048,1049,1052],{},"Embedding the full page × locale matrix makes the bundle large. Past the limit of an Edge platform the build warns and names it, see ",[768,1045,1047],{"href":1046},"#bundle-limits-on-edge","Bundle limits",". For big catalogs switch to ",[754,1050,1051],{},"source"," mode, which embeds the compact source files and merges root, page and fallback translations at runtime:",[830,1054,1058],{"className":1055,"code":1056,"language":1057,"meta":835,"style":835},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['nuxt-i18n-micro'],\n  i18n: {\n    translationPayloads: {\n      mode: 'source',\n    },\n  },\n})\n","ts",[754,1059,1060,1066,1087,1114,1125,1135,1152,1158,1164],{"__ignoreMap":835},[839,1061,1062],{"class":841,"line":353},[839,1063,1065],{"class":1064},"sHwdD","\u002F\u002F nuxt.config.ts\n",[839,1067,1068,1072,1075,1079,1083],{"class":841,"line":855},[839,1069,1071],{"class":1070},"s7zQu","export",[839,1073,1074],{"class":1070}," default",[839,1076,1078],{"class":1077},"s2Zo4"," defineNuxtConfig",[839,1080,1082],{"class":1081},"sTEyZ","(",[839,1084,1086],{"class":1085},"sMK4o","{\n",[839,1088,1090,1094,1097,1100,1103,1106,1108,1111],{"class":841,"line":1089},3,[839,1091,1093],{"class":1092},"swJcz","  modules",[839,1095,1096],{"class":1085},":",[839,1098,1099],{"class":1081}," [",[839,1101,1102],{"class":1085},"'",[839,1104,1105],{"class":848},"nuxt-i18n-micro",[839,1107,1102],{"class":1085},[839,1109,1110],{"class":1081},"]",[839,1112,1113],{"class":1085},",\n",[839,1115,1117,1120,1122],{"class":841,"line":1116},4,[839,1118,1119],{"class":1092},"  i18n",[839,1121,1096],{"class":1085},[839,1123,1124],{"class":1085}," {\n",[839,1126,1128,1131,1133],{"class":841,"line":1127},5,[839,1129,1130],{"class":1092},"    translationPayloads",[839,1132,1096],{"class":1085},[839,1134,1124],{"class":1085},[839,1136,1138,1141,1143,1146,1148,1150],{"class":841,"line":1137},6,[839,1139,1140],{"class":1092},"      mode",[839,1142,1096],{"class":1085},[839,1144,1145],{"class":1085}," '",[839,1147,1051],{"class":848},[839,1149,1102],{"class":1085},[839,1151,1113],{"class":1085},[839,1153,1155],{"class":841,"line":1154},7,[839,1156,1157],{"class":1085},"    },\n",[839,1159,1161],{"class":841,"line":1160},8,[839,1162,1163],{"class":1085},"  },\n",[839,1165,1167,1170],{"class":841,"line":1166},9,[839,1168,1169],{"class":1085},"}",[839,1171,1172],{"class":1081},")\n",[743,1174,1175,1176,1178,1179,1181],{},"In ",[754,1177,1051],{}," mode the browser always fetches payloads from the server route, which merges them on request (any public copy holds the compact source tree that only the server reads). That needs a running server, so do not use ",[754,1180,1051],{}," for a pure static site.",[1183,1184,1186],"h3",{"id":1185},"bundle-limits-on-edge","Bundle limits on Edge",[1188,1189,1190,1203],"table",{},[1191,1192,1193],"thead",{},[1194,1195,1196,1200],"tr",{},[1197,1198,1199],"th",{},"Platform",[1197,1201,1202],{},"Limit",[1204,1205,1206,1215,1223],"tbody",{},[1194,1207,1208,1212],{},[1209,1210,1211],"td",{},"Cloudflare Workers",[1209,1213,1214],{},"64 MiB uncompressed, on Free and Paid. No compressed limit. 1 s startup, 128 MB memory",[1194,1216,1217,1220],{},[1209,1218,1219],{},"Vercel Edge",[1209,1221,1222],{},"1 MB gzip on Hobby, 2 MB on Pro, 4 MB on Enterprise",[1194,1224,1225,1228],{},[1209,1226,1227],{},"Netlify Edge",[1209,1229,1230],{},"20 MB compressed",[743,1232,1233],{},"The build sums the dictionaries it embeds and warns only past the lowest limit of the platform. It counts dictionaries alone, so the app comes on top. For example, 120 pages × 4 locales with a 60 KB root file embed:",[1188,1235,1236,1249],{},[1191,1237,1238],{},[1194,1239,1240,1243,1246],{},[1197,1241,1242],{},"Mode",[1197,1244,1245],{},"Embedded",[1197,1247,1248],{},"Fits",[1204,1250,1251,1264],{},[1194,1252,1253,1258,1261],{},[1209,1254,1255],{},[754,1256,1257],{},"premerged",[1209,1259,1260],{},"34.9 MiB",[1209,1262,1263],{},"Cloudflare; not Vercel Edge or Netlify Edge",[1194,1265,1266,1270,1273],{},[1209,1267,1268],{},[754,1269,1051],{},[1209,1271,1272],{},"5.7 MiB",[1209,1274,1275],{},"Still 3 MB gzip on Vercel Edge",[743,1277,1278,1279,916],{},"A catalog that size on Vercel Edge needs a ",[768,1280,1282],{"href":1281},"#app-baseurl-and-payload-hosts","payload host",[743,1284,1285,1287],{},[754,1286,1051],{}," pays a merge per page and locale in each isolate, about 1 ms in that example and 7 ms of CPU in a cold one. It grows with the size of the fallback chain: about 43 ms for 4 MB of chain files. Netlify Edge allows 50 ms of CPU per request and Cloudflare's Free plan 10 ms.",[1183,1289,1291],{"id":1290},"dates-on-edge-runtimes","Dates on Edge runtimes",[743,1293,1294,1297,1298,1301,1302,1304],{},[754,1295,1296],{},"$td"," uses the runtime's ",[754,1299,1300],{},"Intl",", and its ICU data can differ from the browser's. On Netlify Edge a formatted date can contain U+202F (narrow no-break space) where Chrome has a normal space, so Vue logs one hydration mismatch and the text corrects itself on hydration. Plain Nuxt with plain ",[754,1303,1300],{}," does the same there; Deno Deploy does not.",[1306,1307,1308],"tip",{},[743,1309,1310,1312,1313,1316,1317,1320,1321,1323,1324,1327],{},[754,1311,304],{}," with ",[754,1314,1315],{},"date"," or ",[754,1318,1319],{},"relativeDate"," already allows the mismatch. For ",[754,1322,1296],{}," in a template, put ",[754,1325,1326],{},"data-allow-mismatch=\"text\""," on the element.",[774,1329,1331],{"id":1330},"static-site-nuxi-generate","Static site (nuxi generate)",[830,1333,1335],{"className":832,"code":1334,"language":834,"meta":835,"style":835},"npx nuxi generate\n",[754,1336,1337],{"__ignoreMap":835},[839,1338,1339,1341,1343],{"class":841,"line":353},[839,1340,845],{"class":844},[839,1342,849],{"class":848},[839,1344,1345],{"class":848}," generate\n",[743,1347,1348,1351],{},[754,1349,1350],{},"nuxi build --preset \u003Cstatic preset>"," does the same.",[747,1353,1354,1364,1382,1392],{},[750,1355,1356,1357,1359,1360,1363],{},"The default ",[754,1358,1257],{}," mode writes every payload into ",[754,1361,1362],{},".output\u002Fpublic\u002F_locales\u002F",", so any static host can serve them.",[750,1365,1366,1367,1370,1371,870,1374,1377,1378,1381],{},"Pages are prerendered for each locale: under ",[754,1368,1369],{},"prefix"," the module seeds every localized root (",[754,1372,1373],{},"\u002Fen",[754,1375,1376],{},"\u002Fde","), and ",[754,1379,1380],{},"\u002F"," is kept as a redirect stub.",[750,1383,1384,1385,1391],{},"Leave ",[768,1386,1388],{"href":1387},"\u002Fapi\u002Fmodule-options#translationpayloads",[754,1389,1390],{},"prerenderRoutes"," off: the public copy already contains the payload files.",[750,1393,863,1394,1396,1397,1400],{},[754,1395,1051],{}," mode or ",[754,1398,1399],{},"publicAssets: false"," there is nothing for the browser to read, and the build warns.",[762,1402,1403],{},[743,1404,1405,1406,1409,1410,1412,1413,1416,1417,1420],{},"There is no server to read a cookie or ",[754,1407,1408],{},"Accept-Language",", so a saved locale does not redirect ",[754,1411,1380],{}," on the first load. Under ",[754,1414,1415],{},"no_prefix"," the HTML holds the default locale, and a saved cookie is not applied on load: ",[754,1418,1419],{},"$switchLocale"," still works in the open page.",[743,1422,1423,1424,916],{},"For Cloudflare Pages see ",[768,1425,1427],{"href":1426},"#cloudflare-pages","Cloudflare Pages",[743,1429,1430,1431,1435,1436,1439],{},"For a build with ",[768,1432,1434],{"href":1433},"\u002Fguide\u002Flayers#multiple-domains","locale domains",", run generate once per domain, with ",[754,1437,1438],{},"NUXT_I18N_DOMAIN"," as the host of the run. Each tree then holds that domain's pages and payloads. Nitro has no variable for the output folder, so read your own from the config:",[830,1441,1443],{"className":1055,"code":1442,"language":1057,"meta":835,"style":835},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  nitro: { output: { publicDir: process.env.PUBLIC_DIR } },\n})\n",[754,1444,1445,1449,1461,1501],{"__ignoreMap":835},[839,1446,1447],{"class":841,"line":353},[839,1448,1065],{"class":1064},[839,1450,1451,1453,1455,1457,1459],{"class":841,"line":855},[839,1452,1071],{"class":1070},[839,1454,1074],{"class":1070},[839,1456,1078],{"class":1077},[839,1458,1082],{"class":1081},[839,1460,1086],{"class":1085},[839,1462,1463,1466,1468,1471,1474,1476,1478,1481,1483,1486,1488,1491,1493,1496,1498],{"class":841,"line":1089},[839,1464,1465],{"class":1092},"  nitro",[839,1467,1096],{"class":1085},[839,1469,1470],{"class":1085}," {",[839,1472,1473],{"class":1092}," output",[839,1475,1096],{"class":1085},[839,1477,1470],{"class":1085},[839,1479,1480],{"class":1092}," publicDir",[839,1482,1096],{"class":1085},[839,1484,1485],{"class":1081}," process",[839,1487,916],{"class":1085},[839,1489,1490],{"class":1081},"env",[839,1492,916],{"class":1085},[839,1494,1495],{"class":1081},"PUBLIC_DIR ",[839,1497,1169],{"class":1085},[839,1499,1500],{"class":1085}," },\n",[839,1502,1503,1505],{"class":841,"line":1116},[839,1504,1169],{"class":1085},[839,1506,1172],{"class":1081},[830,1508,1510],{"className":832,"code":1509,"language":834,"meta":835,"style":835},"NUXT_I18N_DOMAIN=example.de PUBLIC_DIR=sites\u002Fexample.de npx nuxi generate\nNUXT_I18N_DOMAIN=example.com PUBLIC_DIR=sites\u002Fexample.com npx nuxi generate\n",[754,1511,1512,1537],{"__ignoreMap":835},[839,1513,1514,1516,1519,1522,1525,1527,1530,1533,1535],{"class":841,"line":353},[839,1515,1438],{"class":1081},[839,1517,1518],{"class":1085},"=",[839,1520,1521],{"class":848},"example.de",[839,1523,1524],{"class":1081}," PUBLIC_DIR",[839,1526,1518],{"class":1085},[839,1528,1529],{"class":848},"sites\u002Fexample.de",[839,1531,1532],{"class":844}," npx",[839,1534,849],{"class":848},[839,1536,1345],{"class":848},[839,1538,1539,1541,1543,1546,1548,1550,1553,1555,1557],{"class":841,"line":855},[839,1540,1438],{"class":1081},[839,1542,1518],{"class":1085},[839,1544,1545],{"class":848},"example.com",[839,1547,1524],{"class":1081},[839,1549,1518],{"class":1085},[839,1551,1552],{"class":848},"sites\u002Fexample.com",[839,1554,1532],{"class":844},[839,1556,849],{"class":848},[839,1558,1345],{"class":848},[747,1560,1561,1568,1571,1578],{},[750,1562,1563,1564,1567],{},"Keep the folders outside ",[754,1565,1566],{},".output",": each run empties it.",[750,1569,1570],{},"Absolute links to the other domains are not crawled.",[750,1572,1573,1574,1577],{},"Without the variable, a build with a ",[754,1575,1576],{},"baseUrl"," locale warns and generates the build config, where those locales are links and get no pages.",[750,1579,1580,1581,1584],{},"On a Node server the same variable pins the process to one domain, whatever ",[754,1582,1583],{},"Host"," says.",[743,1586,1587,1588,1591,1592,1595,1596,1599,1600,1603,1604,1607,1608,1611,1612,1615],{},"A static host applies its own headers to these files; set caching in the host's config. The module's ",[754,1589,1590],{},"\u002F_locales\u002F*"," rule does reach Cloudflare Pages through ",[754,1593,1594],{},"_headers"," and Vercel through ",[754,1597,1598],{},"config.json",", as ",[754,1601,1602],{},"public, max-age=60",". To ship ",[754,1605,1606],{},".gz"," \u002F ",[754,1609,1610],{},".br"," siblings, turn on ",[754,1613,1614],{},"nitro.compressPublicAssets",": the module compresses the payload copy with the same settings.",[774,1617,1619],{"id":1618},"cache-headers-and-datebuild","Cache headers and dateBuild",[1188,1621,1622,1634],{},[1191,1623,1624],{},[1194,1625,1626,1629],{},[1197,1627,1628],{},"Request",[1197,1630,1631],{},[754,1632,1633],{},"Cache-Control",[1204,1635,1636,1654,1667,1689,1710,1723],{},[1194,1637,1638,1649],{},[1209,1639,1640,1641,1644,1645,1648],{},"Node server or route, ",[754,1642,1643],{},"?v="," equal to the current ",[754,1646,1647],{},"dateBuild",", a non-empty dictionary",[1209,1650,1651],{},[754,1652,1653],{},"private, max-age=\u003ChttpCacheDuration>, immutable",[1194,1655,1656,1662],{},[1209,1657,1658,1659,1661],{},"Node server or route, without ",[754,1660,1643],{},", with an old one, or an empty dictionary",[1209,1663,1664],{},[754,1665,1666],{},"public, max-age=0, must-revalidate",[1194,1668,1669,1677],{},[1209,1670,1671,1672,1674,1675],{},"A host's copy of ",[754,1673,823],{},", any ",[754,1676,1643],{},[1209,1678,1679,1681,1682,1688],{},[754,1680,1602],{}," (",[768,1683,1685],{"href":1684},"\u002Fapi\u002Fmodule-options#other",[754,1686,1687],{},"httpCacheControl",")",[1194,1690,1691,1704],{},[1209,1692,1693,1695,1696,1699,1700,1703],{},[754,1694,1051],{}," mode, ",[754,1697,1698],{},"cacheTtl",", or ",[754,1701,1702],{},"apiBaseServerHost",": a dictionary can change with no build",[1209,1705,1706,1707,1709],{},"the ",[754,1708,1687],{}," header, always",[1194,1711,1712,1715],{},[1209,1713,1714],{},"Server route, the dictionary could not be read",[1209,1716,1717,870,1720],{},[754,1718,1719],{},"503",[754,1721,1722],{},"no-store",[1194,1724,1725,1728],{},[1209,1726,1727],{},"dev server",[1209,1729,1730],{},"none",[743,1732,1733],{},"Why the table looks like this:",[747,1735,1736,1743,1753,1760],{},[750,1737,1738,1739,1742],{},"The URL with the current ",[754,1740,1741],{},"v"," is pinned like a hashed asset, and only what sees the query can say so: the server route, and a Node server, which sets the header on its static files.",[750,1744,1745,1746,1749,1750,1752],{},"It is ",[754,1747,1748],{},"private",", so a CDN that ignores the query cannot answer the next ",[754,1751,1741],{}," from this response.",[750,1754,1755,1756,1759],{},"A host's static files take a path-wide header from a ",[754,1757,1758],{},"\u002F_locales\u002F**"," route rule, which cannot see the query, so it stays short; a repeat load still blocks on nothing.",[750,1761,1762,1763,1765],{},"An old ",[754,1764,1741],{}," stays servable, as cached HTML names it.",[743,1767,1768,1771,1772,1775,1776,1782,1783,1786,1787,1790],{},[754,1769,1770],{},"httpCacheControl: false"," keeps every static file on ",[754,1773,1774],{},"max-age=0, must-revalidate",". ",[768,1777,1779],{"href":1778},"\u002Fapi\u002Fmodule-options#httpcacheduration",[754,1780,1781],{},"httpCacheDuration"," defaults to one year; ",[754,1784,1785],{},"0"," sends no header. ",[754,1788,1789],{},"$clearCache()"," revalidates whatever it loads next.",[743,1792,1793,1794,1797,1798,1801,1802,1805,1806,1809,1810,1812,1813,1816],{},"Safari requests a preloaded payload again when it may not reuse the response: with ",[754,1795,1796],{},"no-cache"," and an ",[754,1799,1800],{},"ETag"," the second request is a ",[754,1803,1804],{},"304",", with neither a cache header nor a validator it is a second full download. A ",[754,1807,1808],{},"max-age"," above ",[754,1811,1785],{}," gives one request. Only ",[754,1814,1815],{},"httpCacheDuration: 0"," on a host that adds no validator pays this.",[743,1818,1819,1824,1825,1827],{},[768,1820,1822],{"href":1821},"\u002Fapi\u002Fmodule-options#datebuild",[754,1823,1647],{}," is the ",[754,1826,1643],{}," value. By default it is a hash of your translation files, so it changes only when translations change, and browsers keep their cached payloads across deploys that did not touch them. It also moves with the fallback chain.",[747,1829,1830,1833],{},[750,1831,1832],{},"Set it yourself to pin a value.",[750,1834,1835,1836,1316,1838,1841,1842,1844,1845,916],{},"Set ",[754,1837,1785],{},[754,1839,1840],{},"''"," to drop ",[754,1843,1643],{}," entirely; payloads are then never ",[754,1846,1847],{},"immutable",[1306,1849,1850],{},[743,1851,1852,1853,1856,1857,1859],{},"After replacing a dictionary in place on a Node server, restart with ",[754,1854,1855],{},"NUXT_I18N_DATE_BUILD=\u003Cnew value>",": nothing else moves ",[754,1858,1741],{}," without a rebuild.",[1183,1861,1863],{"id":1862},"root-and-delta-files","Root and delta files",[743,1865,1866,1868,1869,1872],{},[754,1867,1257],{}," writes one root per locale, ",[754,1870,1871],{},"__root\u002F\u003Clocale>\u002Fdata.json",", and in each page's file only what differs from it.",[747,1874,1875,1882,1885],{},[750,1876,1877,1878,1881],{},"The page file marks the root it was made against with a ",[754,1879,1880],{},"__i18n_root"," key.",[750,1883,1884],{},"The browser fetches both, the page shows nothing until both are in, and SSR merges them once per chunk.",[750,1886,1887,1888,1890],{},"A file with no mark is a whole dictionary and stands alone: dev, ",[754,1889,1051],{}," mode, the server route, and a host still holding older files all answer one, with no setting.",[743,1892,1893,1894,1897,1898,1901],{},"So anyone reading ",[754,1895,1896],{},"_locales\u002F*\u002Fdata.json"," directly reads a delta. Set ",[754,1899,1900],{},"translationPayloads.rootDelta: false"," to keep whole files.",[743,1903,1904],{},"A tab open across a deploy that asks for a new delta sees that it was made against another root, and fetches that root before showing it.",[1183,1906,1908],{"id":1907},"when-a-dictionary-cannot-be-read","When a dictionary cannot be read",[743,1910,1911],{},"A failed fetch from a host (anything but a 404), an unreadable or corrupt file, or a 200 that is not a JSON object reaches no cache, and the next request reads again:",[747,1913,1914,1942,1952],{},[750,1915,1916,1917,1312,1919,1922,1923,870,1926,870,1929,870,1932,870,1935,1938,1939,896],{},"a page render logs a warning, shows raw keys for that dictionary and answers ",[754,1918,1719],{},[754,1920,1921],{},"Cache-Control: no-store",", the same in every CDN header (",[754,1924,1925],{},"CDN-Cache-Control",[754,1927,1928],{},"Cloudflare-CDN-Cache-Control",[754,1930,1931],{},"Netlify-CDN-Cache-Control",[754,1933,1934],{},"Vercel-CDN-Cache-Control",[754,1936,1937],{},"Surrogate-Control",", over any from a route rule) and ",[754,1940,1941],{},"Retry-After: 60",[750,1943,1944,1947,1948,1312,1950,896],{},[754,1945,1946],{},"\u002F_locales\u002F..."," answers ",[754,1949,1719],{},[754,1951,1722],{},[750,1953,1954,1957,1958,1961],{},[754,1955,1956],{},"useTranslationServerMiddleware"," gives a ",[754,1959,1960],{},"t"," that answers the key or the default value.",[743,1963,1964],{},"What happens during the outage:",[747,1966,1967,1973,1979,1995],{},[750,1968,1969,1972],{},[786,1970,1971],{},"Visitors:"," the body of that 503 is the page itself. On hydration the browser reads the dictionary again, and the text appears once the host is back, with Vue's one console error about a hydration mismatch, as the server's HTML had the keys.",[750,1974,1975,1978],{},[786,1976,1977],{},"Crawlers"," are told to come back later.",[750,1980,1981,1984,1985,1316,1988,1991,1992,1994],{},[786,1982,1983],{},"Caches:"," an ",[754,1986,1987],{},"swr",[754,1989,1990],{},"cache"," route rule stores nothing with a status of 400 or more, and a CDN gets ",[754,1993,1722],{},", so no cache keeps the raw keys and the first request after recovery renders the real text.",[750,1996,1997,2000,2001,2004],{},[786,1998,1999],{},"Pages already cached"," by a rule stay as they are: the revalidation fails and stores nothing. On Vercel a failed ",[754,2002,2003],{},"isr"," revalidation keeps the last page the same way.",[743,2006,2007,2008,2011],{},"This covers every chunk a render loads, a failed page chunk with its root at hand included, and a chunk merged later in the render. A page with a healthy dictionary, a redirect and an error page keep their status. A ",[768,2009,2010],{"href":47},"component island"," is the exception: it stays a 200, as a 503 would take it out of the page, so a page whose own dictionary loads can be kept with an island's raw keys. Requests during an outage each reach the host, with no timeout of the module's own beyond the 60 seconds for response headers.",[743,2013,2014,2015,2017,2018,2022],{},"A 404 from the host means it has no such file, which is not a failure. A page render shows the root dictionary, as the browser does, and ",[754,2016,1946],{}," answers the same 404. No cache keeps either, so a file that appears is read on the next request, at the cost of one request to the host per render of such a page. With no root file either the dictionary is empty, and a ",[768,2019,2021],{"href":2020},"\u002Fguide\u002Fupgrade#server-build-and-deployment","prerender"," fails.",[743,2024,2025,2026,2029,2030,2032,2033,2035,2036,2042,2043,2045,2046,2048],{},"The server keeps loaded payloads in an in-process LRU cache of up to ",[754,2027,2028],{},"cacheMaxSize"," entries (1000 by default) that reloads an entry after ",[754,2031,1698],{}," when set; ",[768,2034,94],{"href":95}," covers both, and ",[768,2037,2039],{"href":2038},"\u002Fguide\u002Fperformance#shared-cache-for-several-instances",[754,2040,2041],{},"cacheStorage"," adds a cache shared by instances. Do not add a Nitro ",[754,2044,1990],{}," route rule on ",[754,2047,1758],{}," on top: it keys by full URL, query included, and stores a third copy.",[774,2050,2052],{"id":2051},"app-baseurl-and-payload-hosts","App baseURL and payload hosts",[743,2054,2055,2060,2061,2064,2065,2068,2069,2071,2072,2075,2076,2079],{},[786,2056,2057],{},[754,2058,2059],{},"app.baseURL"," needs nothing else. With ",[754,2062,2063],{},"app.baseURL: '\u002Fshop\u002F'"," the browser fetches ",[754,2066,2067],{},"\u002Fshop\u002F_locales\u002F...","; the copy stays in ",[754,2070,1362],{},", which Nitro serves under the base (a static host must mount the output at ",[754,2073,2074],{},"\u002Fshop\u002F","). Locale prefixes and ",[768,2077,2078],{"href":73},"excluded paths"," are matched without the base.",[743,2081,2082,2087,2088,2090,2091,916],{},[786,2083,2084],{},[754,2085,2086],{},"app.cdnURL"," moves the payloads too, when they are files in ",[754,2089,823],{},": the browser fetches and preloads ",[754,2092,2093],{},"\u003CcdnURL>\u002F_locales\u002F...",[747,2095,2096,2107,2113],{},[750,2097,2098,2099,2102,2103,2106],{},"The CDN must hold ",[754,2100,2101],{},"_locales\u002F"," beside ",[754,2104,2105],{},"_nuxt\u002F",", at that path.",[750,2108,2109,2110,916],{},"It must allow your site's origin (CORS), as the file arrives by ",[754,2111,2112],{},"fetch",[750,2114,2115,2116,2118],{},"A dictionary only the server route answers (",[754,2117,1051],{}," mode, no public copy) stays on the app's origin.",[743,2120,2121,2122,2125,2126,2128,2129,2132,2133,2136,2137,2139,2140,2142],{},"A runtime ",[754,2123,2124],{},"NUXT_APP_BASE_URL"," on ",[754,2127,1012],{}," needs Node compatibility (",[754,2130,2131],{},"nodejs_compat","). With ",[754,2134,2135],{},"nitro.cloudflare.nodeCompat"," off, which Nitro also falls to on an old date with no flag, it does not see the variable and serves ",[754,2138,1380],{},", plain Nuxt included, while a locale redirect still goes to the base. Set ",[754,2141,2059],{}," at build there.",[743,2144,2145],{},"To serve payloads from another origin, point the client and server at it and turn the local outputs off:",[830,2147,2149],{"className":1055,"code":2148,"language":1057,"meta":835,"style":835},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['nuxt-i18n-micro'],\n  i18n: {\n    apiBaseClientHost: 'https:\u002F\u002Fcdn.example.com',\n    apiBaseServerHost: 'https:\u002F\u002Fcdn.example.com',\n    translationPayloads: {\n      serverHandler: false,\n      publicAssets: false,\n      serverAssets: false,\n    },\n  },\n})\n",[754,2150,2151,2155,2167,2185,2193,2209,2224,2232,2245,2256,2267,2272,2277],{"__ignoreMap":835},[839,2152,2153],{"class":841,"line":353},[839,2154,1065],{"class":1064},[839,2156,2157,2159,2161,2163,2165],{"class":841,"line":855},[839,2158,1071],{"class":1070},[839,2160,1074],{"class":1070},[839,2162,1078],{"class":1077},[839,2164,1082],{"class":1081},[839,2166,1086],{"class":1085},[839,2168,2169,2171,2173,2175,2177,2179,2181,2183],{"class":841,"line":1089},[839,2170,1093],{"class":1092},[839,2172,1096],{"class":1085},[839,2174,1099],{"class":1081},[839,2176,1102],{"class":1085},[839,2178,1105],{"class":848},[839,2180,1102],{"class":1085},[839,2182,1110],{"class":1081},[839,2184,1113],{"class":1085},[839,2186,2187,2189,2191],{"class":841,"line":1116},[839,2188,1119],{"class":1092},[839,2190,1096],{"class":1085},[839,2192,1124],{"class":1085},[839,2194,2195,2198,2200,2202,2205,2207],{"class":841,"line":1127},[839,2196,2197],{"class":1092},"    apiBaseClientHost",[839,2199,1096],{"class":1085},[839,2201,1145],{"class":1085},[839,2203,2204],{"class":848},"https:\u002F\u002Fcdn.example.com",[839,2206,1102],{"class":1085},[839,2208,1113],{"class":1085},[839,2210,2211,2214,2216,2218,2220,2222],{"class":841,"line":1137},[839,2212,2213],{"class":1092},"    apiBaseServerHost",[839,2215,1096],{"class":1085},[839,2217,1145],{"class":1085},[839,2219,2204],{"class":848},[839,2221,1102],{"class":1085},[839,2223,1113],{"class":1085},[839,2225,2226,2228,2230],{"class":841,"line":1154},[839,2227,1130],{"class":1092},[839,2229,1096],{"class":1085},[839,2231,1124],{"class":1085},[839,2233,2234,2237,2239,2243],{"class":841,"line":1160},[839,2235,2236],{"class":1092},"      serverHandler",[839,2238,1096],{"class":1085},[839,2240,2242],{"class":2241},"sfNiH"," false",[839,2244,1113],{"class":1085},[839,2246,2247,2250,2252,2254],{"class":841,"line":1166},[839,2248,2249],{"class":1092},"      publicAssets",[839,2251,1096],{"class":1085},[839,2253,2242],{"class":2241},[839,2255,1113],{"class":1085},[839,2257,2258,2261,2263,2265],{"class":841,"line":6},[839,2259,2260],{"class":1092},"      serverAssets",[839,2262,1096],{"class":1085},[839,2264,2242],{"class":2241},[839,2266,1113],{"class":1085},[839,2268,2270],{"class":841,"line":2269},11,[839,2271,1157],{"class":1085},[839,2273,2275],{"class":841,"line":2274},12,[839,2276,1163],{"class":1085},[839,2278,2280,2282],{"class":841,"line":2279},13,[839,2281,1169],{"class":1085},[839,2283,1172],{"class":1081},[747,2285,2286,2297,2304],{},[750,2287,2288,2289,2292,2293,2296],{},"On Node, ",[754,2290,2291],{},"serverAssets"," writes the same copy for the server's own reads, and that file answers ",[754,2294,2295],{},"\u002F_locales",": it must be off too, also if you keep the server route for the browser, which it would never reach.",[750,2298,2299,2300,2303],{},"The host must serve the same ",[754,2301,2302],{},"\u003CapiBaseUrl>\u002F\u003Cpage>\u002F\u003Clocale>\u002Fdata.json"," layout.",[750,2305,2306],{},"The build warns when every local output is off and a host is missing.",[743,2308,2309,2310,870,2313,955,2316,2319,2320,2322,2323,2328],{},"The same values can come from ",[754,2311,2312],{},"NUXT_I18N_APP_BASE_URL",[754,2314,2315],{},"NUXT_I18N_APP_BASE_CLIENT_HOST",[754,2317,2318],{},"NUXT_I18N_APP_BASE_SERVER_HOST"," at build time. ",[754,2321,2318],{}," also works at runtime and wins over the build value. See ",[768,2324,2326],{"href":2325},"\u002Fapi\u002Fmodule-options#apibaseserverhost",[754,2327,1702],{}," for the details.",[774,2330,771],{"id":2331},"platforms",[743,2333,2334],{},"Only what the module or its output needs. Accounts, regions and CLI logins are in the platform's docs.",[1183,2336,1211],{"id":2337},"cloudflare-workers",[743,2339,2340,2341,1775,2344,2347,2348,2351,2352,2358],{},"Preset ",[754,2342,2343],{},"cloudflare_module",[754,2345,2346],{},"wrangler deploy"," bundles Nitro's output a second time with esbuild, and after that a raw ",[754,2349,2350],{},"defineAsyncComponent(() => import('.\u002FX.vue'))"," renders empty on the server. Nuxt's default error page is one, so a 404 has an empty body and the browser logs a hydration mismatch. The client then renders the page and the status stays 404, but without JavaScript the page is blank. This is ",[768,2353,2357],{"href":2354,"rel":2355},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F33270",[2356],"nofollow","nuxt#33270",": plain Nuxt without the module does the same. Page routes are not affected.",[743,2360,2361],{},"Turn the second bundle off:",[830,2363,2365],{"className":1055,"code":2364,"language":1057,"meta":835,"style":835},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  nitro: {\n    preset: 'cloudflare_module',\n    cloudflare: {\n      deployConfig: true, \u002F\u002F `wrangler` below applies only with it\n      wrangler: {\n        no_bundle: true,\n        find_additional_modules: true,\n        rules: [{ type: 'ESModule', globs: ['**\u002F*.mjs'] }],\n      },\n    },\n  },\n})\n",[754,2366,2367,2371,2383,2391,2406,2415,2431,2440,2451,2462,2511,2516,2520,2524],{"__ignoreMap":835},[839,2368,2369],{"class":841,"line":353},[839,2370,1065],{"class":1064},[839,2372,2373,2375,2377,2379,2381],{"class":841,"line":855},[839,2374,1071],{"class":1070},[839,2376,1074],{"class":1070},[839,2378,1078],{"class":1077},[839,2380,1082],{"class":1081},[839,2382,1086],{"class":1085},[839,2384,2385,2387,2389],{"class":841,"line":1089},[839,2386,1465],{"class":1092},[839,2388,1096],{"class":1085},[839,2390,1124],{"class":1085},[839,2392,2393,2396,2398,2400,2402,2404],{"class":841,"line":1116},[839,2394,2395],{"class":1092},"    preset",[839,2397,1096],{"class":1085},[839,2399,1145],{"class":1085},[839,2401,2343],{"class":848},[839,2403,1102],{"class":1085},[839,2405,1113],{"class":1085},[839,2407,2408,2411,2413],{"class":841,"line":1127},[839,2409,2410],{"class":1092},"    cloudflare",[839,2412,1096],{"class":1085},[839,2414,1124],{"class":1085},[839,2416,2417,2420,2422,2425,2428],{"class":841,"line":1137},[839,2418,2419],{"class":1092},"      deployConfig",[839,2421,1096],{"class":1085},[839,2423,2424],{"class":2241}," true",[839,2426,2427],{"class":1085},",",[839,2429,2430],{"class":1064}," \u002F\u002F `wrangler` below applies only with it\n",[839,2432,2433,2436,2438],{"class":841,"line":1154},[839,2434,2435],{"class":1092},"      wrangler",[839,2437,1096],{"class":1085},[839,2439,1124],{"class":1085},[839,2441,2442,2445,2447,2449],{"class":841,"line":1160},[839,2443,2444],{"class":1092},"        no_bundle",[839,2446,1096],{"class":1085},[839,2448,2424],{"class":2241},[839,2450,1113],{"class":1085},[839,2452,2453,2456,2458,2460],{"class":841,"line":1166},[839,2454,2455],{"class":1092},"        find_additional_modules",[839,2457,1096],{"class":1085},[839,2459,2424],{"class":2241},[839,2461,1113],{"class":1085},[839,2463,2464,2467,2469,2471,2474,2477,2479,2481,2484,2486,2488,2491,2493,2495,2497,2500,2502,2505,2507,2509],{"class":841,"line":6},[839,2465,2466],{"class":1092},"        rules",[839,2468,1096],{"class":1085},[839,2470,1099],{"class":1081},[839,2472,2473],{"class":1085},"{",[839,2475,2476],{"class":1092}," type",[839,2478,1096],{"class":1085},[839,2480,1145],{"class":1085},[839,2482,2483],{"class":848},"ESModule",[839,2485,1102],{"class":1085},[839,2487,2427],{"class":1085},[839,2489,2490],{"class":1092}," globs",[839,2492,1096],{"class":1085},[839,2494,1099],{"class":1081},[839,2496,1102],{"class":1085},[839,2498,2499],{"class":848},"**\u002F*.mjs",[839,2501,1102],{"class":1085},[839,2503,2504],{"class":1081},"] ",[839,2506,1169],{"class":1085},[839,2508,1110],{"class":1081},[839,2510,1113],{"class":1085},[839,2512,2513],{"class":841,"line":2269},[839,2514,2515],{"class":1085},"      },\n",[839,2517,2518],{"class":841,"line":2274},[839,2519,1157],{"class":1085},[839,2521,2522],{"class":841,"line":2279},[839,2523,1163],{"class":1085},[839,2525,2527,2529],{"class":841,"line":2526},14,[839,2528,1169],{"class":1085},[839,2530,1172],{"class":1081},[830,2532,2534],{"className":832,"code":2533,"language":834,"meta":835,"style":835},"npx nuxi build\ncd .output\u002Fserver && npx wrangler deploy -c wrangler.json\n",[754,2535,2536,2544],{"__ignoreMap":835},[839,2537,2538,2540,2542],{"class":841,"line":353},[839,2539,845],{"class":844},[839,2541,849],{"class":848},[839,2543,852],{"class":848},[839,2545,2546,2549,2552,2555,2557,2560,2563,2566],{"class":841,"line":855},[839,2547,2548],{"class":1077},"cd",[839,2550,2551],{"class":848}," .output\u002Fserver",[839,2553,2554],{"class":1085}," &&",[839,2556,1532],{"class":844},[839,2558,2559],{"class":848}," wrangler",[839,2561,2562],{"class":848}," deploy",[839,2564,2565],{"class":848}," -c",[839,2567,2568],{"class":848}," wrangler.json\n",[743,2570,1835,2571,2574,2575,2578,2579,2582,2583,2586],{},[754,2572,2573],{},"compatibilityDate"," to ",[754,2576,2577],{},"2024-09-19"," or later: an older one picks the legacy preset, which writes no ",[754,2580,2581],{},"wrangler.json"," and gives no error. The 404 then renders, and the upload gets smaller: 190 KiB gzip against 246 KiB on the test app. Your own ",[754,2584,2585],{},"error.vue"," is the other way out, but it covers only the error page.",[743,2588,2589,2590,2592,2593,916],{},"The module itself does not need ",[754,2591,2131],{},". For the limits see ",[768,2594,1047],{"href":1046},[1183,2596,1427],{"id":1015},[743,2598,2599,2600,2603,2604,2607,2608,916],{},"Use the ",[754,2601,2602],{},"cloudflare-pages-static"," preset. ",[754,2605,2606],{},"nuxi generate --preset cloudflare-pages"," is a server build with no ",[754,2609,2610],{},"index.html",[830,2612,2614],{"className":1055,"code":2613,"language":1057,"meta":835,"style":835},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  nitro: {\n    preset: 'cloudflare-pages-static',\n    prerender: { autoSubfolderIndex: false },\n  },\n})\n",[754,2615,2616,2620,2632,2640,2654,2672,2676],{"__ignoreMap":835},[839,2617,2618],{"class":841,"line":353},[839,2619,1065],{"class":1064},[839,2621,2622,2624,2626,2628,2630],{"class":841,"line":855},[839,2623,1071],{"class":1070},[839,2625,1074],{"class":1070},[839,2627,1078],{"class":1077},[839,2629,1082],{"class":1081},[839,2631,1086],{"class":1085},[839,2633,2634,2636,2638],{"class":841,"line":1089},[839,2635,1465],{"class":1092},[839,2637,1096],{"class":1085},[839,2639,1124],{"class":1085},[839,2641,2642,2644,2646,2648,2650,2652],{"class":841,"line":1116},[839,2643,2395],{"class":1092},[839,2645,1096],{"class":1085},[839,2647,1145],{"class":1085},[839,2649,2602],{"class":848},[839,2651,1102],{"class":1085},[839,2653,1113],{"class":1085},[839,2655,2656,2659,2661,2663,2666,2668,2670],{"class":841,"line":1127},[839,2657,2658],{"class":1092},"    prerender",[839,2660,1096],{"class":1085},[839,2662,1470],{"class":1085},[839,2664,2665],{"class":1092}," autoSubfolderIndex",[839,2667,1096],{"class":1085},[839,2669,2242],{"class":2241},[839,2671,1500],{"class":1085},[839,2673,2674],{"class":841,"line":1137},[839,2675,1163],{"class":1085},[839,2677,2678,2680],{"class":841,"line":1154},[839,2679,1169],{"class":1085},[839,2681,1172],{"class":1081},[830,2683,2685],{"className":832,"code":2684,"language":834,"meta":835,"style":835},"npx nuxi generate\nnpx wrangler pages project create my-site --production-branch main --force\nnpx wrangler pages deploy dist --project-name my-site --branch main\n",[754,2686,2687,2695,2722],{"__ignoreMap":835},[839,2688,2689,2691,2693],{"class":841,"line":353},[839,2690,845],{"class":844},[839,2692,849],{"class":848},[839,2694,1345],{"class":848},[839,2696,2697,2699,2701,2704,2707,2710,2713,2716,2719],{"class":841,"line":855},[839,2698,845],{"class":844},[839,2700,2559],{"class":848},[839,2702,2703],{"class":848}," pages",[839,2705,2706],{"class":848}," project",[839,2708,2709],{"class":848}," create",[839,2711,2712],{"class":848}," my-site",[839,2714,2715],{"class":848}," --production-branch",[839,2717,2718],{"class":848}," main",[839,2720,2721],{"class":848}," --force\n",[839,2723,2724,2726,2728,2730,2732,2735,2738,2740,2743],{"class":841,"line":1089},[839,2725,845],{"class":844},[839,2727,2559],{"class":848},[839,2729,2703],{"class":848},[839,2731,2562],{"class":848},[839,2733,2734],{"class":848}," dist",[839,2736,2737],{"class":848}," --project-name",[839,2739,2712],{"class":848},[839,2741,2742],{"class":848}," --branch",[839,2744,2745],{"class":848}," main\n",[747,2747,2748,2761,2773,2799],{},[750,2749,2750,2753,2754,2757,2758,916],{},[786,2751,2752],{},"Output."," The preset writes to ",[754,2755,2756],{},"dist\u002F",", not ",[754,2759,2760],{},".output\u002Fpublic",[750,2762,2763,2768,2769,2772],{},[786,2764,2765,916],{},[754,2766,2767],{},"--force"," Without it a new wrangler (4.156 here) hands ",[754,2770,2771],{},"pages project create"," over to Workers. With it you get a classic Pages project. It is needed once, for the create.",[750,2774,2775,2780,2781,2783,2784,2787,2788,2791,2792,2794,2795,2798],{},[786,2776,2777,916],{},[754,2778,2779],{},"autoSubfolderIndex: false"," Pages answers ",[754,2782,1376],{}," with a 308 to ",[754,2785,2786],{},"\u002Fde\u002F"," while canonical and ",[754,2789,2790],{},"hreflang"," name ",[754,2793,1376],{},", so they point at a redirect. With this option the file is ",[754,2796,2797],{},"de.html",", and the redirect is gone.",[750,2800,2801,2807,2808,2811],{},[786,2802,2803,2806],{},[754,2804,2805],{},"NUXT_E1005"," in the console on a 404"," is a normal 404. Nuxt reports it that way because ",[754,2809,2810],{},"404.html"," starts on the client, before the app is mounted. The page works, and plain Nuxt prints the same line.",[1183,2813,2815],{"id":2814},"vercel-and-vercel-edge","Vercel and Vercel Edge",[743,2817,2818,2819,955,2821,2824,2825,2828,2829,2831,2832,916],{},"Presets ",[754,2820,983],{},[754,2822,2823],{},"vercel_edge",", with no change to the app. The tags work without ",[754,2826,2827],{},"metaBaseUrl",", from the platform's forwarded headers. Vercel Edge has a small bundle limit: see ",[768,2830,1047],{"href":1046},". For a shared cache use the ",[768,2833,2835,2838],{"href":2834},"\u002Fguide\u002Fperformance#upstash-on-vercel-and-vercel-edge",[754,2836,2837],{},"upstash"," driver",[1183,2840,2841],{"id":986},"Netlify",[743,2843,2818,2844,955,2846,916],{},[754,2845,986],{},[754,2847,2848],{},"netlify_edge",[830,2850,2852],{"className":832,"code":2851,"language":834,"meta":835,"style":835},"npx nuxi build --preset netlify\nnpx netlify deploy --prod --no-build --dir dist --functions .netlify\u002Ffunctions-internal\n",[754,2853,2854,2869],{"__ignoreMap":835},[839,2855,2856,2858,2860,2863,2866],{"class":841,"line":353},[839,2857,845],{"class":844},[839,2859,849],{"class":848},[839,2861,2862],{"class":848}," build",[839,2864,2865],{"class":848}," --preset",[839,2867,2868],{"class":848}," netlify\n",[839,2870,2871,2873,2876,2878,2881,2884,2887,2889,2892],{"class":841,"line":855},[839,2872,845],{"class":844},[839,2874,2875],{"class":848}," netlify",[839,2877,2562],{"class":848},[839,2879,2880],{"class":848}," --prod",[839,2882,2883],{"class":848}," --no-build",[839,2885,2886],{"class":848}," --dir",[839,2888,2734],{"class":848},[839,2890,2891],{"class":848}," --functions",[839,2893,2894],{"class":848}," .netlify\u002Ffunctions-internal\n",[747,2896,2897,2912,2922],{},[750,2898,2899,2905,2906,955,2909,2911],{},[786,2900,1384,2901,2904],{},[754,2902,2903],{},"nitro.output"," unset."," The preset writes ",[754,2907,2908],{},".netlify\u002F",[754,2910,2756],{}," itself.",[750,2913,2914,2921],{},[786,2915,2916,2917,2920],{},"Keep a ",[754,2918,2919],{},"package.json"," in the folder you deploy from."," Without one the CLI looks at the parent folder and deploys no function, with no error.",[750,2923,2924,2926,2927,2930,2931,916],{},[786,2925,1227],{}," deploys with ",[754,2928,2929],{},"--dir dist"," alone. See ",[768,2932,1291],{"href":2933},"#dates-on-edge-runtimes",[1183,2935,2937],{"id":2936},"cloud-run","Cloud Run",[743,2939,2940,2941,2943,2944,2947,2948,2951],{},"Use the default ",[754,2942,827],{}," build. ",[754,2945,2946],{},"gcloud run deploy --source"," needs a ",[754,2949,2950],{},"Dockerfile"," in the output folder when docker is not running locally:",[830,2953,2957],{"className":2954,"code":2955,"language":2956,"meta":835,"style":835},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# .output\u002FDockerfile\nFROM node:22-slim\nWORKDIR \u002Fapp\nCOPY . .\nENV NODE_ENV=production\nCMD [\"node\", \"server\u002Findex.mjs\"]\n","dockerfile",[754,2958,2959,2964,2969,2974,2979,2984],{"__ignoreMap":835},[839,2960,2961],{"class":841,"line":353},[839,2962,2963],{},"# .output\u002FDockerfile\n",[839,2965,2966],{"class":841,"line":855},[839,2967,2968],{},"FROM node:22-slim\n",[839,2970,2971],{"class":841,"line":1089},[839,2972,2973],{},"WORKDIR \u002Fapp\n",[839,2975,2976],{"class":841,"line":1116},[839,2977,2978],{},"COPY . .\n",[839,2980,2981],{"class":841,"line":1127},[839,2982,2983],{},"ENV NODE_ENV=production\n",[839,2985,2986],{"class":841,"line":1137},[839,2987,2988],{},"CMD [\"node\", \"server\u002Findex.mjs\"]\n",[830,2990,2992],{"className":832,"code":2991,"language":834,"meta":835,"style":835},"cd .output && gcloud run deploy my-app --source .\n",[754,2993,2994],{"__ignoreMap":835},[839,2995,2996,2998,3001,3003,3006,3009,3011,3014,3017],{"class":841,"line":353},[839,2997,2548],{"class":1077},[839,2999,3000],{"class":848}," .output",[839,3002,2554],{"class":1085},[839,3004,3005],{"class":844}," gcloud",[839,3007,3008],{"class":848}," run",[839,3010,2562],{"class":848},[839,3012,3013],{"class":848}," my-app",[839,3015,3016],{"class":848}," --source",[839,3018,3019],{"class":848}," .\n",[743,3021,3022,3023,3025],{},"The tags work without ",[754,3024,2827],{},", from the platform's forwarded headers.",[1183,3027,3029],{"id":3028},"deno-deploy","Deno Deploy",[743,3031,2340,3032,1775,3034,3037,3038,3041,3042,3045],{},[754,3033,1024],{},[754,3035,3036],{},"deno deploy"," replaces ",[754,3039,3040],{},"deployctl",". Create a dynamic app with the entrypoint ",[754,3043,3044],{},"server\u002Findex.ts",", and deploy from the output folder.",[1183,3047,3048],{"id":997},"Firebase",[1188,3050,3051,3061],{},[1191,3052,3053],{},[1194,3054,3055,3058],{},[1197,3056,3057],{},"Product",[1197,3059,3060],{},"Setup",[1204,3062,3063,3075,3089],{},[1194,3064,3065,3068],{},[1209,3066,3067],{},"App Hosting",[1209,3069,3070,3071,3074],{},"Runs the Node build: use the default preset or ",[754,3072,3073],{},"firebase-app-hosting",", and Node 20+",[1194,3076,3077,3080],{},[1209,3078,3079],{},"Cloud Functions",[1209,3081,3082,3083,3085,3086],{},"The ",[754,3084,997],{}," preset embeds the payloads and needs ",[754,3087,3088],{},"firebase-functions",[1194,3090,3091,3094],{},[1209,3092,3093],{},"Hosting (static)",[1209,3095,3096,3097,3099,3100,3102],{},"Serves ",[754,3098,2760],{}," as files, so ",[754,3101,1758],{}," gets Hosting's headers",[743,3104,3105,3106,3109,3110,3113,3114,3116,3117,3120,3121,3124,3125,955,3127,3129],{},"On static Hosting, if JSON comes back with the wrong ",[754,3107,3108],{},"Content-Type"," or caching, add a ",[754,3111,3112],{},"headers"," entry for ",[754,3115,1758],{}," in ",[754,3118,3119],{},"firebase.json",". Nuxt ",[754,3122,3123],{},"routeRules"," headers do not apply to files Hosting serves itself; the payload route sets its own ",[754,3126,3108],{},[754,3128,1633],{}," on responses that do reach the server.",[1183,3131,3132],{"id":991},"AWS Amplify",[743,3134,3135,3137],{},[754,3136,991],{}," keeps static files beside its compute folder, not next to the server, so the payloads are embedded like on a function platform.",[1183,3139,3141],{"id":3140},"several-instances-of-one-build","Several instances of one build",[743,3143,3144,3145,3147,3148,3150],{},"One artifact can run with a different default or disabled locale per instance through environment variables: see ",[768,3146,41],{"href":42},". A locale disabled only at runtime still has its static files in ",[754,3149,823],{},"; disable it at build time if those must not be reachable.",[743,3152,3153,3154,916],{},"Instances that load dictionaries from a remote host can share them in Redis, Upstash, Cloudflare KV or D1, Deno KV or another Nitro storage, so the backend gets one request instead of one per instance. It is a cache, not a source of translations: see ",[768,3155,3156],{"href":2038},"Shared cache for several instances",[774,3158,3160],{"id":3159},"behind-a-proxy-or-cdn","Behind a proxy or CDN",[743,3162,3163],{},"The app has to learn the public host and the scheme from the request.",[1188,3165,3166,3182],{},[1191,3167,3168],{},[1194,3169,3170,3173,3176],{},[1197,3171,3172],{},"The proxy sends",[1197,3174,3175],{},"Plain build",[1197,3177,3178,3179,3181],{},"Build with ",[754,3180,1576],{}," on locales",[1204,3183,3184,3196,3217],{},[1194,3185,3186,3191,3194],{},[1209,3187,3188,3189],{},"The real ",[754,3190,1583],{},[1209,3192,3193],{},"Nothing to set",[1209,3195,3193],{},[1194,3197,3198,3207,3209],{},[1209,3199,3200,3201,3203,3204],{},"The origin's ",[754,3202,1583],{},", plus ",[754,3205,3206],{},"X-Forwarded-Host",[1209,3208,3193],{},[1209,3210,3211],{},[768,3212,3214],{"href":3213},"\u002Fapi\u002Fmodule-options#trustforwardedhost",[754,3215,3216],{},"trustForwardedHost: true",[1194,3218,3219,3222,3229],{},[1209,3220,3221],{},"Neither",[1209,3223,3224],{},[768,3225,3227],{"href":3226},"\u002Fapi\u002Fmodule-options#metabaseurl",[754,3228,2827],{},[1209,3230,3231],{},"No setting helps: every request looks like the origin's host, so change the proxy",[747,3233,3234,3254,3269,3283],{},[750,3235,3236,3243,3244,3248,3249,1316,3251,916],{},[786,3237,3238,3239,1316,3241,916],{},"Routes under ",[754,3240,1987],{},[754,3242,1990],{}," The table does not hold there: see ",[768,3245,3247],{"href":3246},"#caching-html","Caching HTML",". Set ",[754,3250,2827],{},[754,3252,3253],{},"site.url",[750,3255,3256,3261,3262,3265,3266,3268],{},[786,3257,3258,916],{},[754,3259,3260],{},"X-Forwarded-Proto"," Send it, or canonical URLs read ",[754,3263,3264],{},"http:\u002F\u002F"," behind an HTTPS proxy. ",[754,3267,2827],{}," also fixes this.",[750,3270,3271,3274,3275,3278,3279,3282],{},[786,3272,3273],{},"In a domain build"," the domain picks the base URL of the tags. ",[754,3276,3277],{},"metaTrustForwardedHost"," does not choose the domain there, only ",[754,3280,3281],{},"trustForwardedHost"," does.",[750,3284,3285,3291],{},[786,3286,3287,3288,2427],{},"Redirects are relative and the locale cookie has no ",[754,3289,3290],{},"Domain"," so both stay on the public host.",[944,3293,3294],{},[743,3295,3296,3302,3303,1316,3305,3307,3308,955,3310,3313,3314,3319,3320,3323,3324,3327,3328,3331,3332,3334,3335,3337,3338,3340,3341,3343],{},[786,3297,3298,3299,3301],{},"Pin ",[754,3300,2827],{}," when the origin stays reachable"," — On a plain build without ",[754,3304,2827],{},[754,3306,3253],{},", canonical, ",[754,3309,2790],{},[754,3311,3312],{},"og:url"," take their host from the request. ",[768,3315,3317],{"href":3316},"\u002Fapi\u002Fmodule-options#metatrustforwardedhost",[754,3318,3277],{}," is on by default, so a direct request with ",[754,3321,3322],{},"X-Forwarded-Host: evil.example"," gets ",[754,3325,3326],{},"https:\u002F\u002Fevil.example"," in those tags, and a cache in front spreads that page. A platform host such as ",[754,3329,3330],{},"*.workers.dev"," is exactly such an origin. ",[754,3333,2827],{}," closes this for ",[754,3336,1583],{}," too. A known host of a domain build keeps its own ",[754,3339,1576],{},". With ",[754,3342,3216],{}," a direct client can pick the page of another domain, so turn that on only behind a proxy that overwrites the header.",[774,3345,3247],{"id":3346},"caching-html",[743,3348,3349],{},"Most URLs are safe to cache, because they name their locale. These depend on the visitor:",[1188,3351,3352,3361],{},[1191,3353,3354],{},[1194,3355,3356,3358],{},[1197,3357,3060],{},[1197,3359,3360],{},"URLs",[1204,3362,3363,3375,3386,3396],{},[1194,3364,3365,3371],{},[1209,3366,3367,3368],{},"Default, ",[754,3369,3370],{},"autoDetectPath: '\u002F'",[1209,3372,3373],{},[754,3374,1380],{},[1194,3376,3377,3381],{},[1209,3378,3379],{},[754,3380,1369],{},[1209,3382,3383,3385],{},[754,3384,1380],{}," and every unprefixed URL, which only redirect",[1194,3387,3388,3393],{},[1209,3389,3390],{},[754,3391,3392],{},"autoDetectPath: '*'",[1209,3394,3395],{},"Every URL",[1194,3397,3398,3402],{},[1209,3399,3400],{},[754,3401,1415],{},[1209,3403,3404],{},"Every page",[747,3406,3407,3434,3465,3482,3537],{},[750,3408,3409,3414,3415,1312,3417,3420,3421,3427,3428,3420,3430,3433],{},[786,3410,3411,916],{},[754,3412,3413],{},"Vary"," Those responses carry ",[754,3416,3413],{},[754,3418,3419],{},"Cookie"," when ",[768,3422,3424],{"href":3423},"\u002Fapi\u002Fmodule-options#localecookie",[754,3425,3426],{},"localeCookie"," is set and ",[754,3429,1408],{},[754,3431,3432],{},"autoDetectLanguage"," is on. A cache that honours it keeps the answers apart.",[750,3435,3436,3441,3442,3445,3446,3448,3449,3452,3453,3456,3457,3459,3460,955,3462,3464],{},[786,3437,3438,3439,2427],{},"A cache that ignores ",[754,3440,3413],{}," such as \"cache everything by URL\", must skip those URLs. Otherwise one visitor's ",[754,3443,3444],{},"302 \u002Fde"," reaches the next visitor, and a stored default page drops the redirect for everyone. On ",[754,3447,1380],{}," you can also set ",[754,3450,3451],{},"redirects: false",". Nitro's route cache keys on the path and its ",[754,3454,3455],{},"varies"," list, so keep ",[754,3458,1380],{}," out of ",[754,3461,1987],{},[754,3463,1990],{}," rules as well.",[750,3466,3467,3472,3473,3475,3476,3478,3479,3481],{},[786,3468,3469,916],{},[754,3470,3471],{},"Set-Cookie"," With ",[754,3474,3426],{}," set, every server-rendered page under a prefix carries ",[754,3477,3471],{},", and a correct CDN will not store it. For cached HTML leave ",[754,3480,3426],{}," off, or strip the header at the edge.",[750,3483,3484,3495,3496,3499,3500,870,3502,955,3504,3506,3507,3510,3511,955,3513,3515,3516,3518,3519,3522,3523,3525,3526,3528,3529,3532,3533,3536],{},[786,3485,3486,955,3488,3490,3491,1316,3493,916],{},[754,3487,1987],{},[754,3489,1990],{}," rules need ",[754,3492,2827],{},[754,3494,3253],{}," Nitro renders such a route with only the headers in ",[754,3497,3498],{},"cache.varies",", so ",[754,3501,1583],{},[754,3503,3206],{},[754,3505,3260],{}," are gone and the request URL reads ",[754,3508,3509],{},"http:\u002F\u002Flocalhost",". Without a fixed origin, canonical, ",[754,3512,2790],{},[754,3514,3312],{}," on those routes point at ",[754,3517,3509],{},", on every platform. Plain Nuxt's ",[754,3520,3521],{},"useRequestURL()"," reads the same there. Taking the host from the visitor instead would put one visitor's ",[754,3524,3206],{}," into the page every visitor gets. A domain build is not affected: its tags use the ",[754,3527,1576],{}," of the locales.",[3530,3531],"br",{},"If one build serves several hosts and no single origin fits, let the rule see the headers and keep one copy per value: ",[754,3534,3535],{},"'\u002Fblog\u002F**': { swr: 60, cache: { varies: ['host', 'x-forwarded-host', 'x-forwarded-proto'] } }",". Every distinct value is a new cache entry, so a client that sends made-up headers fills the cache: put the origin behind a proxy that sets them.",[750,3538,3539,3546,3547,2574,3550,3552,3553,1312,3556,3558,3559,3562,3563,3565],{},[786,3540,3541,955,3543,3545],{},[754,3542,1987],{},[754,3544,1990],{}," rules on a domain build."," The module adds ",[754,3548,3549],{},"host",[754,3551,3498],{}," of every such rule, and ",[754,3554,3555],{},"x-forwarded-host",[754,3557,3281],{},", so one domain does not serve another its page. A rule with ",[754,3560,3561],{},"cache: false"," stays as written. ",[754,3564,2003],{}," is the platform's cache: check that it keys on the host. With the host in the key, a client that sends made-up hosts adds cache entries.",[743,3567,3568,3569,916],{},"For the payload files see ",[768,3570,1619],{"href":3571},"#cache-headers-and-datebuild",[774,3573,3575],{"id":3574},"related","Related",[3577,3578,3579,3583,3585,3589,3591],"card-group",{},[3580,3581],"card",{"icon":3582,"title":94,"to":95},"i-lucide-book-open",[3580,3584],{"icon":3582,"title":41,"to":42},[3580,3586],{"icon":3587,"title":3588,"to":1387},"i-lucide-braces","translationPayloads reference",[3580,3590],{"icon":3582,"title":83,"to":84},[3580,3592],{"icon":3582,"title":77,"to":78},[3594,3595,3596],"style",{},"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}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":835,"searchDepth":855,"depth":855,"links":3598},[3599,3600,3601,3605,3606,3610,3611,3622,3623,3624],{"id":776,"depth":855,"text":777},{"id":827,"depth":855,"text":828},{"id":965,"depth":855,"text":966,"children":3602},[3603,3604],{"id":1185,"depth":1089,"text":1186},{"id":1290,"depth":1089,"text":1291},{"id":1330,"depth":855,"text":1331},{"id":1618,"depth":855,"text":1619,"children":3607},[3608,3609],{"id":1862,"depth":1089,"text":1863},{"id":1907,"depth":1089,"text":1908},{"id":2051,"depth":855,"text":2052},{"id":2331,"depth":855,"text":771,"children":3612},[3613,3614,3615,3616,3617,3618,3619,3620,3621],{"id":2337,"depth":1089,"text":1211},{"id":1015,"depth":1089,"text":1427},{"id":2814,"depth":1089,"text":2815},{"id":986,"depth":1089,"text":2841},{"id":2936,"depth":1089,"text":2937},{"id":3028,"depth":1089,"text":3029},{"id":997,"depth":1089,"text":3048},{"id":991,"depth":1089,"text":3132},{"id":3140,"depth":1089,"text":3141},{"id":3159,"depth":855,"text":3160},{"id":3346,"depth":855,"text":3247},{"id":3574,"depth":855,"text":3575},"Deploy to a Node server, serverless or Edge, or as a static site — where translation payloads go, what each platform needs, proxies, and caching.","md","2026-11-04T00:40:16+04:00",null,{"outline":3630},[855,1089],{"order":91,"group":92},{"title":88,"description":3625},"a8QuleECEA7Rw8AXx2lr8u0UuAMbYo8Q7quK_qEc3XI",[3635,3637],{"title":83,"path":84,"description":3636},"Share i18n config and translation files through Nuxt layers, and serve locales on their own domains.",{"title":94,"path":95,"description":3638},"The settings that change memory, payload size and caching, and how to measure what your app ships.",1793790721957]