[{"data":1,"prerenderedAt":2203},["ShallowReactive",2],{"navigation":3,"v3-navigation":411,"\u002Fguide\u002Ftesting":738,"\u002Fguide\u002Ftesting-surround":2198},[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,359,363,367,371,375,379,383,387,391,395,399,403,407],{"title":352,"path":348,"stem":349,"order":353},"News & Releases",1,{"title":355,"path":356,"stem":357,"order":358},"v4.1.0","\u002Fnews\u002Fv4.1.0","news\u002Fv4.1.0",9,{"title":360,"path":361,"stem":362,"order":6},"v4.0.0","\u002Fnews\u002Fv4.0.0","news\u002Fv4.0.0",{"title":364,"path":365,"stem":366,"order":18},"v3.24.0","\u002Fnews\u002Fv3.24.0","news\u002Fv3.24.0",{"title":368,"path":369,"stem":370,"order":23},"v3.22.0","\u002Fnews\u002Fv3.22.0","news\u002Fv3.22.0",{"title":372,"path":373,"stem":374,"order":28},"v3.21.0","\u002Fnews\u002Fv3.21.0","news\u002Fv3.21.0",{"title":376,"path":377,"stem":378,"order":33},"v3.20.0","\u002Fnews\u002Fv3.20.0","news\u002Fv3.20.0",{"title":380,"path":381,"stem":382,"order":39},"v3.19.0","\u002Fnews\u002Fv3.19.0","news\u002Fv3.19.0",{"title":384,"path":385,"stem":386,"order":44},"v3.0.0","\u002Fnews\u002Fv3.0.0","news\u002Fv3.0.0",{"title":388,"path":389,"stem":390,"order":49},"v2.14.1","\u002Fnews\u002Fv2.14.1","news\u002Fv2.14.1",{"title":392,"path":393,"stem":394,"order":54},"v2.0.0","\u002Fnews\u002Fv2.0.0","news\u002Fv2.0.0",{"title":396,"path":397,"stem":398,"order":60},"v1.73.0","\u002Fnews\u002Fv1.73.0","news\u002Fv1.73.0",{"title":400,"path":401,"stem":402,"order":65},"v1.65.0","\u002Fnews\u002Fv1.65.0","news\u002Fv1.65.0",{"title":404,"path":405,"stem":406,"order":70},"v1.58.0","\u002Fnews\u002Fv1.58.0","news\u002Fv1.58.0",{"title":408,"path":409,"stem":410,"order":75},"v1.1.0","\u002Fnews\u002Fv1.1.0","news\u002Fv1.1.0",[412],{"title":413,"path":414,"stem":415,"children":416},"V3","\u002Fv3","v3",[417,420,557,603,696,717,734],{"title":136,"path":414,"stem":418,"order":419},"v3\u002Findex",0,{"title":5,"order":6,"path":421,"stem":422,"children":423,"page":129},"\u002Fv3\u002Fguide","v3\u002Fguide",[424,429,433,437,441,446,450,454,458,462,466,470,474,478,483,487,492,496,500,504,508,512,516,519,523,527,532,538,543,547,552],{"title":425,"path":426,"stem":427,"order":6,"group":428},"Getting Started","\u002Fv3\u002Fguide\u002Fgetting-started","v3\u002Fguide\u002Fgetting-started","Basics",{"title":430,"path":431,"stem":432,"order":18,"group":428},"Configuration","\u002Fv3\u002Fguide\u002Fconfiguration","v3\u002Fguide\u002Fconfiguration",{"title":434,"path":435,"stem":436,"order":23,"group":428},"Folder Structure","\u002Fv3\u002Fguide\u002Ffolder-structure","v3\u002Fguide\u002Ffolder-structure",{"title":438,"path":439,"stem":440,"order":28,"group":428},"Routing Strategy","\u002Fv3\u002Fguide\u002Fstrategy","v3\u002Fguide\u002Fstrategy",{"title":442,"path":443,"stem":444,"order":33,"group":445},"Translating Content","\u002Fv3\u002Fguide\u002Fusing","v3\u002Fguide\u002Fusing","Usage",{"title":447,"path":448,"stem":449,"order":39,"group":445},"Per Component Translations","\u002Fv3\u002Fguide\u002Fper-component-translations","v3\u002Fguide\u002Fper-component-translations",{"title":451,"path":452,"stem":453,"order":44,"group":445},"Custom Localized Routes","\u002Fv3\u002Fguide\u002Fcustom-locale-routes","v3\u002Fguide\u002Fcustom-locale-routes",{"title":455,"path":456,"stem":457,"order":49,"group":445},"Custom Auto Detect","\u002Fv3\u002Fguide\u002Fcustom-auto-detect","v3\u002Fguide\u002Fcustom-auto-detect",{"title":459,"path":460,"stem":461,"order":54,"group":445},"Runtime Overrides","\u002Fv3\u002Fguide\u002Fruntime-overrides","v3\u002Fguide\u002Fruntime-overrides",{"title":463,"path":464,"stem":465,"order":60,"group":445},"Layers","\u002Fv3\u002Fguide\u002Flayers","v3\u002Fguide\u002Flayers",{"title":77,"path":467,"stem":468,"order":65,"group":469},"\u002Fv3\u002Fguide\u002Fseo","v3\u002Fguide\u002Fseo","SEO & URLs",{"title":471,"path":472,"stem":473,"order":70,"group":469},"Multi Domain Locales","\u002Fv3\u002Fguide\u002Fmulti-domain-locales","v3\u002Fguide\u002Fmulti-domain-locales",{"title":475,"path":476,"stem":477,"order":75,"group":469},"Excluding Static Files","\u002Fv3\u002Fguide\u002Fexcluding-static-files","v3\u002Fguide\u002Fexcluding-static-files",{"title":479,"path":480,"stem":481,"order":80,"group":482},"Performance","\u002Fv3\u002Fguide\u002Fperformance","v3\u002Fguide\u002Fperformance","Performance & Deployment",{"title":484,"path":485,"stem":486,"order":86,"group":482},"Benchmark Results","\u002Fv3\u002Fguide\u002Fperformance-results","v3\u002Fguide\u002Fperformance-results",{"title":488,"path":489,"stem":490,"order":491,"group":482},"Performance methodology","\u002Fv3\u002Fguide\u002Fperformance-methodology","v3\u002Fguide\u002Fperformance-methodology",155,{"title":493,"path":494,"stem":495,"order":91,"group":482},"Server Side Translations","\u002Fv3\u002Fguide\u002Fserver-side-translations","v3\u002Fguide\u002Fserver-side-translations",{"title":497,"path":498,"stem":499,"order":97,"group":482},"Firebase Deployment","\u002Fv3\u002Fguide\u002Ffirebase","v3\u002Fguide\u002Ffirebase",{"title":501,"path":502,"stem":503,"order":102,"group":482},"Release Smoke Checks","\u002Fv3\u002Fguide\u002Frelease-smoke","v3\u002Fguide\u002Frelease-smoke",{"title":505,"path":506,"stem":507,"order":107,"group":482},"Preset local testing","\u002Fv3\u002Fguide\u002Fpreset-local-testing","v3\u002Fguide\u002Fpreset-local-testing",{"title":509,"path":510,"stem":511,"order":113,"group":482},"Maintenance Commands","\u002Fv3\u002Fguide\u002Fmaintenance-commands","v3\u002Fguide\u002Fmaintenance-commands",{"title":513,"path":514,"stem":515,"order":118,"group":108},"CLI Tool","\u002Fv3\u002Fguide\u002Fcli","v3\u002Fguide\u002Fcli",{"title":104,"path":517,"stem":518,"order":123,"group":108},"\u002Fv3\u002Fguide\u002Fdevtools","v3\u002Fguide\u002Fdevtools",{"title":520,"path":521,"stem":522,"order":128,"group":108},"Testing Your App","\u002Fv3\u002Fguide\u002Ftesting","v3\u002Fguide\u002Ftesting",{"title":120,"path":524,"stem":525,"order":526,"group":108},"\u002Fv3\u002Fguide\u002Fstorybook","v3\u002Fguide\u002Fstorybook",240,{"title":528,"path":529,"stem":530,"order":531,"group":108},"Crowdin Integration","\u002Fv3\u002Fguide\u002Fcrowdin","v3\u002Fguide\u002Fcrowdin",250,{"title":533,"path":534,"stem":535,"order":536,"group":537},"Migration from nuxt-i18n","\u002Fv3\u002Fguide\u002Fmigration","v3\u002Fguide\u002Fmigration",260,"Migration & Help",{"title":539,"path":540,"stem":541,"order":542,"group":537},"Upgrade to v3","\u002Fv3\u002Fguide\u002Fv3-upgrade","v3\u002Fguide\u002Fv3-upgrade",270,{"title":25,"path":544,"stem":545,"order":546,"group":537},"\u002Fv3\u002Fguide\u002Ffaq","v3\u002Fguide\u002Ffaq",280,{"title":548,"path":549,"stem":550,"order":551,"group":537},"Contribution","\u002Fv3\u002Fguide\u002Fcontribution","v3\u002Fguide\u002Fcontribution",290,{"title":553,"path":554,"stem":555,"order":556,"group":537},"Testing the Module","\u002Fv3\u002Fguide\u002Ftesting-strategies","v3\u002Fguide\u002Ftesting-strategies",300,{"title":558,"order":18,"path":559,"stem":560,"children":561},"Integrations","\u002Fv3\u002Fintegrations","v3\u002Fintegrations\u002Findex",[562,563,567,571,575,579,583,587,591,595,599],{"title":136,"path":559,"stem":560,"order":6},{"title":564,"path":565,"stem":566,"order":18},"Vue Package","\u002Fv3\u002Fintegrations\u002Fvue-package","v3\u002Fintegrations\u002Fvue-package",{"title":568,"path":569,"stem":570,"order":23},"React Package","\u002Fv3\u002Fintegrations\u002Freact-package","v3\u002Fintegrations\u002Freact-package",{"title":572,"path":573,"stem":574,"order":28},"Preact Package","\u002Fv3\u002Fintegrations\u002Fpreact-package","v3\u002Fintegrations\u002Fpreact-package",{"title":576,"path":577,"stem":578,"order":33},"Solid Package","\u002Fv3\u002Fintegrations\u002Fsolid-package","v3\u002Fintegrations\u002Fsolid-package",{"title":580,"path":581,"stem":582,"order":39},"Astro Package","\u002Fv3\u002Fintegrations\u002Fastro-package","v3\u002Fintegrations\u002Fastro-package",{"title":584,"path":585,"stem":586,"order":44},"VitePress Package","\u002Fv3\u002Fintegrations\u002Fvitepress-package","v3\u002Fintegrations\u002Fvitepress-package",{"title":588,"path":589,"stem":590,"order":49},"Runtime Package","\u002Fv3\u002Fintegrations\u002Fruntime-package","v3\u002Fintegrations\u002Fruntime-package",{"title":592,"path":593,"stem":594,"order":54},"Node.js Package","\u002Fv3\u002Fintegrations\u002Fnodejs-package","v3\u002Fintegrations\u002Fnodejs-package",{"title":596,"path":597,"stem":598,"order":60},"Types Generator","\u002Fv3\u002Fintegrations\u002Ftypes-generator","v3\u002Fintegrations\u002Ftypes-generator",{"title":600,"path":601,"stem":602,"order":65},"Devtools Package","\u002Fv3\u002Fintegrations\u002Fdevtools-ui-package","v3\u002Fintegrations\u002Fdevtools-ui-package",{"title":181,"order":23,"path":604,"stem":605,"children":606},"\u002Fv3\u002Fapi","v3\u002Fapi\u002Findex",[607,608,612,616,620,624],{"title":136,"path":604,"stem":605,"order":6},{"title":609,"path":610,"stem":611,"order":18},"Methods","\u002Fv3\u002Fapi\u002Fmethods","v3\u002Fapi\u002Fmethods",{"title":613,"path":614,"stem":615,"order":23},"Events","\u002Fv3\u002Fapi\u002Fevents","v3\u002Fapi\u002Fevents",{"title":617,"path":618,"stem":619,"order":28},"Translations and Cache","\u002Fv3\u002Fapi\u002Fi18n-cache-api","v3\u002Fapi\u002Fi18n-cache-api",{"title":621,"path":622,"stem":623,"order":33},"Module Options","\u002Fv3\u002Fapi\u002Fmodule-options","v3\u002Fapi\u002Fmodule-options",{"title":205,"path":625,"stem":626,"children":627,"order":39},"\u002Fv3\u002Fapi\u002Fpackages","v3\u002Fapi\u002Fpackages",[628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692],{"title":629,"path":630,"stem":631},"@i18n-micro\u002Fastro","\u002Fv3\u002Fapi\u002Fpackages\u002Fastro","v3\u002Fapi\u002Fpackages\u002Fastro",{"title":633,"path":634,"stem":635},"@i18n-micro\u002Fcore","\u002Fv3\u002Fapi\u002Fpackages\u002Fcore","v3\u002Fapi\u002Fpackages\u002Fcore",{"title":637,"path":638,"stem":639},"@i18n-micro\u002Fdevtools-ui","\u002Fv3\u002Fapi\u002Fpackages\u002Fdevtools-ui","v3\u002Fapi\u002Fpackages\u002Fdevtools-ui",{"title":641,"path":642,"stem":643},"@i18n-micro\u002Fhmr","\u002Fv3\u002Fapi\u002Fpackages\u002Fhmr","v3\u002Fapi\u002Fpackages\u002Fhmr",{"title":645,"path":646,"stem":647},"@i18n-micro\u002Fnode","\u002Fv3\u002Fapi\u002Fpackages\u002Fnode","v3\u002Fapi\u002Fpackages\u002Fnode",{"title":649,"path":650,"stem":651},"@i18n-micro\u002Fpath-strategy","\u002Fv3\u002Fapi\u002Fpackages\u002Fpath-strategy","v3\u002Fapi\u002Fpackages\u002Fpath-strategy",{"title":653,"path":654,"stem":655},"@i18n-micro\u002Fpreact","\u002Fv3\u002Fapi\u002Fpackages\u002Fpreact","v3\u002Fapi\u002Fpackages\u002Fpreact",{"title":657,"path":658,"stem":659},"@i18n-micro\u002Freact","\u002Fv3\u002Fapi\u002Fpackages\u002Freact","v3\u002Fapi\u002Fpackages\u002Freact",{"title":661,"path":662,"stem":663},"@i18n-micro\u002Froute-strategy","\u002Fv3\u002Fapi\u002Fpackages\u002Froute-strategy","v3\u002Fapi\u002Fpackages\u002Froute-strategy",{"title":665,"path":666,"stem":667},"@i18n-micro\u002Fruntime","\u002Fv3\u002Fapi\u002Fpackages\u002Fruntime","v3\u002Fapi\u002Fpackages\u002Fruntime",{"title":669,"path":670,"stem":671},"@i18n-micro\u002Fsolid","\u002Fv3\u002Fapi\u002Fpackages\u002Fsolid","v3\u002Fapi\u002Fpackages\u002Fsolid",{"title":673,"path":674,"stem":675},"@i18n-micro\u002Ftest-utils","\u002Fv3\u002Fapi\u002Fpackages\u002Ftest-utils","v3\u002Fapi\u002Fpackages\u002Ftest-utils",{"title":677,"path":678,"stem":679},"@i18n-micro\u002Ftypes","\u002Fv3\u002Fapi\u002Fpackages\u002Ftypes","v3\u002Fapi\u002Fpackages\u002Ftypes",{"title":681,"path":682,"stem":683},"@i18n-micro\u002Ftypes-generator","\u002Fv3\u002Fapi\u002Fpackages\u002Ftypes-generator","v3\u002Fapi\u002Fpackages\u002Ftypes-generator",{"title":685,"path":686,"stem":687},"@i18n-micro\u002Futils","\u002Fv3\u002Fapi\u002Fpackages\u002Futils","v3\u002Fapi\u002Fpackages\u002Futils",{"title":689,"path":690,"stem":691},"@i18n-micro\u002Fvitepress","\u002Fv3\u002Fapi\u002Fpackages\u002Fvitepress","v3\u002Fapi\u002Fpackages\u002Fvitepress",{"title":693,"path":694,"stem":695},"@i18n-micro\u002Fvue","\u002Fv3\u002Fapi\u002Fpackages\u002Fvue","v3\u002Fapi\u002Fpackages\u002Fvue",{"title":299,"order":28,"path":697,"stem":698,"children":699},"\u002Fv3\u002Fcomponents","v3\u002Fcomponents\u002Findex",[700,701,705,709,713],{"title":136,"path":697,"stem":698,"order":6},{"title":702,"path":703,"stem":704,"order":18},"i18n-t","\u002Fv3\u002Fcomponents\u002Fi18n-t","v3\u002Fcomponents\u002Fi18n-t",{"title":706,"path":707,"stem":708,"order":23},"i18n-switcher","\u002Fv3\u002Fcomponents\u002Fi18n-switcher","v3\u002Fcomponents\u002Fi18n-switcher",{"title":710,"path":711,"stem":712,"order":28},"i18n-link","\u002Fv3\u002Fcomponents\u002Fi18n-link","v3\u002Fcomponents\u002Fi18n-link",{"title":714,"path":715,"stem":716,"order":33},"i18n-group","\u002Fv3\u002Fcomponents\u002Fi18n-group","v3\u002Fcomponents\u002Fi18n-group",{"title":278,"path":718,"stem":719,"children":720,"order":33},"\u002Fv3\u002Fcomposables","v3\u002Fcomposables\u002Findex",[721,722,725,728,731],{"title":136,"path":718,"stem":719,"order":6},{"title":283,"path":723,"stem":724,"order":18},"\u002Fv3\u002Fcomposables\u002FuseI18n","v3\u002Fcomposables\u002FuseI18n",{"title":295,"path":726,"stem":727,"order":23},"\u002Fv3\u002Fcomposables\u002FuseLocaleHead","v3\u002Fcomposables\u002FuseLocaleHead",{"title":291,"path":729,"stem":730,"order":28},"\u002Fv3\u002Fcomposables\u002FuseI18nHead","v3\u002Fcomposables\u002FuseI18nHead",{"title":287,"path":732,"stem":733,"order":33},"\u002Fv3\u002Fcomposables\u002FuseI18nLocale","v3\u002Fcomposables\u002FuseI18nLocale",{"title":735,"path":736,"stem":737,"order":39},"Examples","\u002Fv3\u002Fexamples","v3\u002Fexamples",{"id":739,"title":115,"body":740,"description":2189,"extension":2190,"lastUpdated":2191,"links":2192,"meta":2193,"navigation":2195,"path":116,"seo":2196,"stem":117,"__hash__":2197},"docs\u002Fguide\u002Ftesting.md",{"type":741,"value":742,"toc":2181},"minimark",[743,747,766,772,777,844,848,1080,1187,1200,1204,1310,1564,1617,1630,1634,1735,1755,1787,1791,1797,2141,2158,2162,2177],[744,745,115],"h1",{"id":746},"testing-your-app",[748,749,750,751,755,756,758,759,761,762,765],"p",{},"Components that call ",[752,753,754],"code",{},"useI18n()"," need an i18n instance in unit tests. ",[752,757,673],{}," gives you a fake ",[752,760,754],{}," with real translation, plural and formatting logic, so you can mount a component with your own dictionaries and no Nuxt server. For routing and redirects, run the real module end to end with ",[752,763,764],{},"@nuxt\u002Ftest-utils",".",[748,767,768,769,765],{},"This page is about testing your application. How this repository tests the module itself is on ",[770,771,331],"a",{"href":332},[773,774,776],"h2",{"id":775},"install","Install",[778,779,780,819],"code-group",{},[781,782,788],"pre",{"className":783,"code":784,"filename":785,"language":786,"meta":787,"style":787},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add -D @i18n-micro\u002Ftest-utils @nuxt\u002Ftest-utils vitest @vue\u002Ftest-utils happy-dom\n","pnpm","bash","",[752,789,790],{"__ignoreMap":787},[791,792,794,797,801,804,807,810,813,816],"span",{"class":793,"line":353},"line",[791,795,785],{"class":796},"sBMFI",[791,798,800],{"class":799},"sfazB"," add",[791,802,803],{"class":799}," -D",[791,805,806],{"class":799}," @i18n-micro\u002Ftest-utils",[791,808,809],{"class":799}," @nuxt\u002Ftest-utils",[791,811,812],{"class":799}," vitest",[791,814,815],{"class":799}," @vue\u002Ftest-utils",[791,817,818],{"class":799}," happy-dom\n",[781,820,823],{"className":783,"code":821,"filename":822,"language":786,"meta":787,"style":787},"npm install -D @i18n-micro\u002Ftest-utils @nuxt\u002Ftest-utils vitest @vue\u002Ftest-utils happy-dom\n","npm",[752,824,825],{"__ignoreMap":787},[791,826,827,829,832,834,836,838,840,842],{"class":793,"line":353},[791,828,822],{"class":796},[791,830,831],{"class":799}," install",[791,833,803],{"class":799},[791,835,806],{"class":799},[791,837,809],{"class":799},[791,839,812],{"class":799},[791,841,815],{"class":799},[791,843,818],{"class":799},[773,845,847],{"id":846},"mock-usei18n","Mock useI18n",[781,849,853],{"className":850,"code":851,"language":852,"meta":787,"style":787},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F tests\u002Funit-setup.ts\nimport { setupNuxtI18nMock } from '@i18n-micro\u002Ftest-utils'\nimport { mockNuxtImport } from '@nuxt\u002Ftest-utils\u002Fruntime'\nimport { beforeEach, vi } from 'vitest'\n\nexport const { i18n, useI18n, setTranslationsFromJson } = setupNuxtI18nMock({\n  spy: vi.fn, \u002F\u002F every method becomes a vi.fn, so you can assert calls\n  beforeEach, \u002F\u002F reset state and reseed `translations` before each test\n  translations: { welcome: 'Welcome' },\n})\n\nmockNuxtImport('useI18n', () => useI18n)\n","ts",[752,854,855,861,890,911,938,945,985,1007,1018,1043,1050,1055],{"__ignoreMap":787},[791,856,857],{"class":793,"line":353},[791,858,860],{"class":859},"sHwdD","\u002F\u002F tests\u002Funit-setup.ts\n",[791,862,864,868,872,876,879,882,885,887],{"class":793,"line":863},2,[791,865,867],{"class":866},"s7zQu","import",[791,869,871],{"class":870},"sMK4o"," {",[791,873,875],{"class":874},"sTEyZ"," setupNuxtI18nMock",[791,877,878],{"class":870}," }",[791,880,881],{"class":866}," from",[791,883,884],{"class":870}," '",[791,886,673],{"class":799},[791,888,889],{"class":870},"'\n",[791,891,893,895,897,900,902,904,906,909],{"class":793,"line":892},3,[791,894,867],{"class":866},[791,896,871],{"class":870},[791,898,899],{"class":874}," mockNuxtImport",[791,901,878],{"class":870},[791,903,881],{"class":866},[791,905,884],{"class":870},[791,907,908],{"class":799},"@nuxt\u002Ftest-utils\u002Fruntime",[791,910,889],{"class":870},[791,912,914,916,918,921,924,927,929,931,933,936],{"class":793,"line":913},4,[791,915,867],{"class":866},[791,917,871],{"class":870},[791,919,920],{"class":874}," beforeEach",[791,922,923],{"class":870},",",[791,925,926],{"class":874}," vi",[791,928,878],{"class":870},[791,930,881],{"class":866},[791,932,884],{"class":870},[791,934,935],{"class":799},"vitest",[791,937,889],{"class":870},[791,939,941],{"class":793,"line":940},5,[791,942,944],{"emptyLinePlaceholder":943},true,"\n",[791,946,948,951,955,957,960,962,965,967,970,973,976,979,982],{"class":793,"line":947},6,[791,949,950],{"class":866},"export",[791,952,954],{"class":953},"spNyl"," const",[791,956,871],{"class":870},[791,958,959],{"class":874}," i18n",[791,961,923],{"class":870},[791,963,964],{"class":874}," useI18n",[791,966,923],{"class":870},[791,968,969],{"class":874}," setTranslationsFromJson ",[791,971,972],{"class":870},"}",[791,974,975],{"class":870}," =",[791,977,875],{"class":978},"s2Zo4",[791,980,981],{"class":874},"(",[791,983,984],{"class":870},"{\n",[791,986,988,992,995,997,999,1002,1004],{"class":793,"line":987},7,[791,989,991],{"class":990},"swJcz","  spy",[791,993,994],{"class":870},":",[791,996,926],{"class":874},[791,998,765],{"class":870},[791,1000,1001],{"class":874},"fn",[791,1003,923],{"class":870},[791,1005,1006],{"class":859}," \u002F\u002F every method becomes a vi.fn, so you can assert calls\n",[791,1008,1010,1013,1015],{"class":793,"line":1009},8,[791,1011,1012],{"class":874},"  beforeEach",[791,1014,923],{"class":870},[791,1016,1017],{"class":859}," \u002F\u002F reset state and reseed `translations` before each test\n",[791,1019,1020,1023,1025,1027,1030,1032,1034,1037,1040],{"class":793,"line":358},[791,1021,1022],{"class":990},"  translations",[791,1024,994],{"class":870},[791,1026,871],{"class":870},[791,1028,1029],{"class":990}," welcome",[791,1031,994],{"class":870},[791,1033,884],{"class":870},[791,1035,1036],{"class":799},"Welcome",[791,1038,1039],{"class":870},"'",[791,1041,1042],{"class":870}," },\n",[791,1044,1045,1047],{"class":793,"line":6},[791,1046,972],{"class":870},[791,1048,1049],{"class":874},")\n",[791,1051,1053],{"class":793,"line":1052},11,[791,1054,944],{"emptyLinePlaceholder":943},[791,1056,1058,1061,1063,1065,1067,1069,1071,1074,1077],{"class":793,"line":1057},12,[791,1059,1060],{"class":978},"mockNuxtImport",[791,1062,981],{"class":874},[791,1064,1039],{"class":870},[791,1066,283],{"class":799},[791,1068,1039],{"class":870},[791,1070,923],{"class":870},[791,1072,1073],{"class":870}," ()",[791,1075,1076],{"class":953}," =>",[791,1078,1079],{"class":874}," useI18n)\n",[781,1081,1083],{"className":850,"code":1082,"language":852,"meta":787,"style":787},"\u002F\u002F vitest.config.ts\nimport { defineVitestConfig } from '@nuxt\u002Ftest-utils\u002Fconfig'\n\nexport default defineVitestConfig({\n  test: {\n    environment: 'nuxt',\n    setupFiles: ['.\u002Ftests\u002Funit-setup.ts'],\n  },\n})\n",[752,1084,1085,1090,1110,1114,1127,1137,1154,1176,1181],{"__ignoreMap":787},[791,1086,1087],{"class":793,"line":353},[791,1088,1089],{"class":859},"\u002F\u002F vitest.config.ts\n",[791,1091,1092,1094,1096,1099,1101,1103,1105,1108],{"class":793,"line":863},[791,1093,867],{"class":866},[791,1095,871],{"class":870},[791,1097,1098],{"class":874}," defineVitestConfig",[791,1100,878],{"class":870},[791,1102,881],{"class":866},[791,1104,884],{"class":870},[791,1106,1107],{"class":799},"@nuxt\u002Ftest-utils\u002Fconfig",[791,1109,889],{"class":870},[791,1111,1112],{"class":793,"line":892},[791,1113,944],{"emptyLinePlaceholder":943},[791,1115,1116,1118,1121,1123,1125],{"class":793,"line":913},[791,1117,950],{"class":866},[791,1119,1120],{"class":866}," default",[791,1122,1098],{"class":978},[791,1124,981],{"class":874},[791,1126,984],{"class":870},[791,1128,1129,1132,1134],{"class":793,"line":940},[791,1130,1131],{"class":990},"  test",[791,1133,994],{"class":870},[791,1135,1136],{"class":870}," {\n",[791,1138,1139,1142,1144,1146,1149,1151],{"class":793,"line":947},[791,1140,1141],{"class":990},"    environment",[791,1143,994],{"class":870},[791,1145,884],{"class":870},[791,1147,1148],{"class":799},"nuxt",[791,1150,1039],{"class":870},[791,1152,1153],{"class":870},",\n",[791,1155,1156,1159,1161,1164,1166,1169,1171,1174],{"class":793,"line":987},[791,1157,1158],{"class":990},"    setupFiles",[791,1160,994],{"class":870},[791,1162,1163],{"class":874}," [",[791,1165,1039],{"class":870},[791,1167,1168],{"class":799},".\u002Ftests\u002Funit-setup.ts",[791,1170,1039],{"class":870},[791,1172,1173],{"class":874},"]",[791,1175,1153],{"class":870},[791,1177,1178],{"class":793,"line":1009},[791,1179,1180],{"class":870},"  },\n",[791,1182,1183,1185],{"class":793,"line":358},[791,1184,972],{"class":870},[791,1186,1049],{"class":874},[748,1188,1189,1190,1192,1193,1195,1196,1199],{},"Keep ",[752,1191,1060],{}," in the setup file: ",[752,1194,764],{}," has to transform it. ",[752,1197,1198],{},"setupNuxtI18nMock"," uses a private translation cache, so parallel test files do not share state.",[773,1201,1203],{"id":1202},"write-a-test","Write a test",[781,1205,1208],{"className":1206,"code":1207,"language":274,"meta":787,"style":787},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- components\u002FGreeting.vue -->\n\u003Cscript setup lang=\"ts\">\nconst { $t } = useI18n()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cp>{{ $t('welcome') }}\u003C\u002Fp>\n\u003C\u002Ftemplate>\n",[752,1209,1210,1215,1242,1261,1270,1274,1283,1302],{"__ignoreMap":787},[791,1211,1212],{"class":793,"line":353},[791,1213,1214],{"class":859},"\u003C!-- components\u002FGreeting.vue -->\n",[791,1216,1217,1220,1223,1226,1229,1232,1235,1237,1239],{"class":793,"line":863},[791,1218,1219],{"class":870},"\u003C",[791,1221,1222],{"class":990},"script",[791,1224,1225],{"class":953}," setup",[791,1227,1228],{"class":953}," lang",[791,1230,1231],{"class":870},"=",[791,1233,1234],{"class":870},"\"",[791,1236,852],{"class":799},[791,1238,1234],{"class":870},[791,1240,1241],{"class":870},">\n",[791,1243,1244,1247,1249,1252,1254,1256,1258],{"class":793,"line":892},[791,1245,1246],{"class":953},"const",[791,1248,871],{"class":870},[791,1250,1251],{"class":874}," $t ",[791,1253,972],{"class":870},[791,1255,975],{"class":870},[791,1257,964],{"class":978},[791,1259,1260],{"class":874},"()\n",[791,1262,1263,1266,1268],{"class":793,"line":913},[791,1264,1265],{"class":870},"\u003C\u002F",[791,1267,1222],{"class":990},[791,1269,1241],{"class":870},[791,1271,1272],{"class":793,"line":940},[791,1273,944],{"emptyLinePlaceholder":943},[791,1275,1276,1278,1281],{"class":793,"line":947},[791,1277,1219],{"class":870},[791,1279,1280],{"class":990},"template",[791,1282,1241],{"class":870},[791,1284,1285,1288,1290,1293,1296,1298,1300],{"class":793,"line":987},[791,1286,1287],{"class":870},"  \u003C",[791,1289,748],{"class":990},[791,1291,1292],{"class":870},">",[791,1294,1295],{"class":874},"{{ $t('welcome') }}",[791,1297,1265],{"class":870},[791,1299,748],{"class":990},[791,1301,1241],{"class":870},[791,1303,1304,1306,1308],{"class":793,"line":1009},[791,1305,1265],{"class":870},[791,1307,1280],{"class":990},[791,1309,1241],{"class":870},[781,1311,1313],{"className":850,"code":1312,"language":852,"meta":787,"style":787},"\u002F\u002F tests\u002Fgreeting.spec.ts\nimport { mountSuspended } from '@nuxt\u002Ftest-utils\u002Fruntime'\nimport { expect, it } from 'vitest'\nimport Greeting from '~\u002Fcomponents\u002FGreeting.vue'\nimport de from '~\u002Flocales\u002Fde.json'\nimport { i18n, setTranslationsFromJson } from '.\u002Funit-setup'\n\nit('renders the German greeting', async () => {\n  await setTranslationsFromJson('de', de)\n  i18n.setLocale('de')\n\n  const wrapper = await mountSuspended(Greeting)\n  expect(wrapper.text()).toBe('Willkommen') \u002F\u002F de.json: { \"welcome\": \"Willkommen\" }\n})\n",[752,1314,1315,1320,1339,1363,1380,1396,1420,1424,1449,1472,1492,1496,1518,1557],{"__ignoreMap":787},[791,1316,1317],{"class":793,"line":353},[791,1318,1319],{"class":859},"\u002F\u002F tests\u002Fgreeting.spec.ts\n",[791,1321,1322,1324,1326,1329,1331,1333,1335,1337],{"class":793,"line":863},[791,1323,867],{"class":866},[791,1325,871],{"class":870},[791,1327,1328],{"class":874}," mountSuspended",[791,1330,878],{"class":870},[791,1332,881],{"class":866},[791,1334,884],{"class":870},[791,1336,908],{"class":799},[791,1338,889],{"class":870},[791,1340,1341,1343,1345,1348,1350,1353,1355,1357,1359,1361],{"class":793,"line":892},[791,1342,867],{"class":866},[791,1344,871],{"class":870},[791,1346,1347],{"class":874}," expect",[791,1349,923],{"class":870},[791,1351,1352],{"class":874}," it",[791,1354,878],{"class":870},[791,1356,881],{"class":866},[791,1358,884],{"class":870},[791,1360,935],{"class":799},[791,1362,889],{"class":870},[791,1364,1365,1367,1370,1373,1375,1378],{"class":793,"line":913},[791,1366,867],{"class":866},[791,1368,1369],{"class":874}," Greeting ",[791,1371,1372],{"class":866},"from",[791,1374,884],{"class":870},[791,1376,1377],{"class":799},"~\u002Fcomponents\u002FGreeting.vue",[791,1379,889],{"class":870},[791,1381,1382,1384,1387,1389,1391,1394],{"class":793,"line":940},[791,1383,867],{"class":866},[791,1385,1386],{"class":874}," de ",[791,1388,1372],{"class":866},[791,1390,884],{"class":870},[791,1392,1393],{"class":799},"~\u002Flocales\u002Fde.json",[791,1395,889],{"class":870},[791,1397,1398,1400,1402,1404,1406,1409,1411,1413,1415,1418],{"class":793,"line":947},[791,1399,867],{"class":866},[791,1401,871],{"class":870},[791,1403,959],{"class":874},[791,1405,923],{"class":870},[791,1407,1408],{"class":874}," setTranslationsFromJson",[791,1410,878],{"class":870},[791,1412,881],{"class":866},[791,1414,884],{"class":870},[791,1416,1417],{"class":799},".\u002Funit-setup",[791,1419,889],{"class":870},[791,1421,1422],{"class":793,"line":987},[791,1423,944],{"emptyLinePlaceholder":943},[791,1425,1426,1429,1431,1433,1436,1438,1440,1443,1445,1447],{"class":793,"line":1009},[791,1427,1428],{"class":978},"it",[791,1430,981],{"class":874},[791,1432,1039],{"class":870},[791,1434,1435],{"class":799},"renders the German greeting",[791,1437,1039],{"class":870},[791,1439,923],{"class":870},[791,1441,1442],{"class":953}," async",[791,1444,1073],{"class":870},[791,1446,1076],{"class":953},[791,1448,1136],{"class":870},[791,1450,1451,1454,1456,1458,1460,1463,1465,1467,1470],{"class":793,"line":358},[791,1452,1453],{"class":866},"  await",[791,1455,1408],{"class":978},[791,1457,981],{"class":990},[791,1459,1039],{"class":870},[791,1461,1462],{"class":799},"de",[791,1464,1039],{"class":870},[791,1466,923],{"class":870},[791,1468,1469],{"class":874}," de",[791,1471,1049],{"class":990},[791,1473,1474,1477,1479,1482,1484,1486,1488,1490],{"class":793,"line":6},[791,1475,1476],{"class":874},"  i18n",[791,1478,765],{"class":870},[791,1480,1481],{"class":978},"setLocale",[791,1483,981],{"class":990},[791,1485,1039],{"class":870},[791,1487,1462],{"class":799},[791,1489,1039],{"class":870},[791,1491,1049],{"class":990},[791,1493,1494],{"class":793,"line":1052},[791,1495,944],{"emptyLinePlaceholder":943},[791,1497,1498,1501,1504,1506,1509,1511,1513,1516],{"class":793,"line":1057},[791,1499,1500],{"class":953},"  const",[791,1502,1503],{"class":874}," wrapper",[791,1505,975],{"class":870},[791,1507,1508],{"class":866}," await",[791,1510,1328],{"class":978},[791,1512,981],{"class":990},[791,1514,1515],{"class":874},"Greeting",[791,1517,1049],{"class":990},[791,1519,1521,1524,1526,1529,1531,1534,1537,1539,1542,1544,1546,1549,1551,1554],{"class":793,"line":1520},13,[791,1522,1523],{"class":978},"  expect",[791,1525,981],{"class":990},[791,1527,1528],{"class":874},"wrapper",[791,1530,765],{"class":870},[791,1532,1533],{"class":978},"text",[791,1535,1536],{"class":990},"())",[791,1538,765],{"class":870},[791,1540,1541],{"class":978},"toBe",[791,1543,981],{"class":990},[791,1545,1039],{"class":870},[791,1547,1548],{"class":799},"Willkommen",[791,1550,1039],{"class":870},[791,1552,1553],{"class":990},") ",[791,1555,1556],{"class":859},"\u002F\u002F de.json: { \"welcome\": \"Willkommen\" }\n",[791,1558,1560,1562],{"class":793,"line":1559},14,[791,1561,972],{"class":870},[791,1563,1049],{"class":874},[748,1565,1566,1567,1569,1570,1573,1574,1573,1577,1573,1580,1573,1583,1573,1586,1589,1590,1593,1594,1573,1596,1573,1599,1573,1602,1573,1605,1573,1608,1573,1611,1573,1614,765],{},"The fake exposes the same methods as the real ",[752,1568,754],{}," (",[752,1571,1572],{},"$t",", ",[752,1575,1576],{},"$tc",[752,1578,1579],{},"$tn",[752,1581,1582],{},"$td",[752,1584,1585],{},"$has",[752,1587,1588],{},"$localePath",", …, with and without ",[752,1591,1592],{},"$",") plus setters for tests: ",[752,1595,1481],{},[752,1597,1598],{},"setLocales",[752,1600,1601],{},"setDefaultLocale",[752,1603,1604],{},"setRouteName",[752,1606,1607],{},"setTranslationsFromJson",[752,1609,1610],{},"loadPageTranslations",[752,1612,1613],{},"mergeTranslations",[752,1615,1616],{},"setMissingHandler",[748,1618,1619,1621,1622,1625,1626,1629],{},[752,1620,1588],{}," and ",[752,1623,1624],{},"$switchLocalePath"," are stubs that prefix the path according to the ",[752,1627,1628],{},"strategy"," option (no real router). Test real links and redirects end to end.",[773,1631,1633],{"id":1632},"lower-level-helpers","Lower-level helpers",[1635,1636,1637,1650],"table",{},[1638,1639,1640],"thead",{},[1641,1642,1643,1647],"tr",{},[1644,1645,1646],"th",{},"Helper",[1644,1648,1649],{},"Use it for",[1651,1652,1653,1678,1699,1709],"tbody",{},[1641,1654,1655,1661],{},[1656,1657,1658],"td",{},[752,1659,1660],{},"createIsolatedFakeI18n(options)",[1656,1662,1663,1664,1666,1667,1670,1671,1674,1675,765],{},"An isolated fake without the Nuxt ",[752,1665,283],{}," wiring, e.g. for plain ",[752,1668,1669],{},"@vue\u002Ftest-utils"," ",[752,1672,1673],{},"mount"," with ",[752,1676,1677],{},"global.mocks",[1641,1679,1680,1685],{},[1656,1681,1682],{},[752,1683,1684],{},"createFakeI18n(options)",[1656,1686,1687,1688,1691,1692,1695,1696,765],{},"A fake on the shared module cache (call ",[752,1689,1690],{},"resetI18n()"," in ",[752,1693,1694],{},"beforeEach","), or isolated with ",[752,1697,1698],{},"isolated: true",[1641,1700,1701,1706],{},[1656,1702,1703],{},[752,1704,1705],{},"createI18nTestContext(options)",[1656,1707,1708],{},"The context behind both, when you need several fakes.",[1641,1710,1711,1732],{},[1656,1712,1713,1573,1716,1573,1719,1573,1721,1573,1724,1573,1726,1573,1729],{},[752,1714,1715],{},"t",[752,1717,1718],{},"tc",[752,1720,852],{},[752,1722,1723],{},"tn",[752,1725,1656],{},[752,1727,1728],{},"tdr",[752,1730,1731],{},"has",[1656,1733,1734],{},"Direct calls on the shared context, for testing plain functions.",[748,1736,1737,1738,1741,1742,1573,1744,1573,1746,1573,1748,1573,1750,1621,1752,1754],{},"The mock is a ",[752,1739,1740],{},"BaseI18n",": ",[752,1743,1715],{},[752,1745,1718],{},[752,1747,1723],{},[752,1749,1656],{},[752,1751,1728],{},[752,1753,1731],{}," are the real ones, on real dictionaries, so a test sees what the app shows.",[748,1756,1757,1758,1573,1761,1573,1764,1573,1767,1573,1770,1573,1772,1621,1775,1778,1779,765],{},"The factory helpers above accept ",[752,1759,1760],{},"locale",[752,1762,1763],{},"defaultLocale",[752,1765,1766],{},"locales",[752,1768,1769],{},"routeName",[752,1771,1628],{},[752,1773,1774],{},"translations",[752,1776,1777],{},"messages"," (dictionaries per locale). A complete example project lives in ",[770,1780,1784],{"href":1781,"rel":1782},"https:\u002F\u002Fgithub.com\u002Fs00d\u002Fnuxt-i18n-micro\u002Ftree\u002Fmain\u002Fpackages\u002Ftest-utils\u002Fexample",[1783],"nofollow",[752,1785,1786],{},"packages\u002Ftest-utils\u002Fexample",[773,1788,1790],{"id":1789},"end-to-end-tests","End-to-end tests",[748,1792,1793,1794,994],{},"Routing, redirects, SEO tags and payload loading need the real module. Start your app with ",[752,1795,1796],{},"@nuxt\u002Ftest-utils\u002Fe2e",[781,1798,1800],{"className":850,"code":1799,"language":852,"meta":787,"style":787},"\u002F\u002F tests\u002Fe2e\u002Flocales.test.ts\nimport { $fetch, fetch, setup } from '@nuxt\u002Ftest-utils\u002Fe2e'\nimport { describe, expect, it } from 'vitest'\n\ndescribe('locales', async () => {\n  await setup({ server: true })\n\n  it('serves the German page', async () => {\n    expect(await $fetch('\u002Fde')).toContain('lang=\"de-DE\"')\n  })\n\n  it('redirects \u002F for a German browser', async () => {\n    const res = await fetch('\u002F', { headers: { 'accept-language': 'de' }, redirect: 'manual' })\n    expect(res.headers.get('location')).toBe('\u002Fde')\n  })\n})\n",[752,1801,1802,1807,1835,1862,1866,1889,1913,1917,1941,1981,1988,1992,2015,2083,2127,2134],{"__ignoreMap":787},[791,1803,1804],{"class":793,"line":353},[791,1805,1806],{"class":859},"\u002F\u002F tests\u002Fe2e\u002Flocales.test.ts\n",[791,1808,1809,1811,1813,1816,1818,1821,1823,1825,1827,1829,1831,1833],{"class":793,"line":863},[791,1810,867],{"class":866},[791,1812,871],{"class":870},[791,1814,1815],{"class":874}," $fetch",[791,1817,923],{"class":870},[791,1819,1820],{"class":874}," fetch",[791,1822,923],{"class":870},[791,1824,1225],{"class":874},[791,1826,878],{"class":870},[791,1828,881],{"class":866},[791,1830,884],{"class":870},[791,1832,1796],{"class":799},[791,1834,889],{"class":870},[791,1836,1837,1839,1841,1844,1846,1848,1850,1852,1854,1856,1858,1860],{"class":793,"line":892},[791,1838,867],{"class":866},[791,1840,871],{"class":870},[791,1842,1843],{"class":874}," describe",[791,1845,923],{"class":870},[791,1847,1347],{"class":874},[791,1849,923],{"class":870},[791,1851,1352],{"class":874},[791,1853,878],{"class":870},[791,1855,881],{"class":866},[791,1857,884],{"class":870},[791,1859,935],{"class":799},[791,1861,889],{"class":870},[791,1863,1864],{"class":793,"line":913},[791,1865,944],{"emptyLinePlaceholder":943},[791,1867,1868,1871,1873,1875,1877,1879,1881,1883,1885,1887],{"class":793,"line":940},[791,1869,1870],{"class":978},"describe",[791,1872,981],{"class":874},[791,1874,1039],{"class":870},[791,1876,1766],{"class":799},[791,1878,1039],{"class":870},[791,1880,923],{"class":870},[791,1882,1442],{"class":953},[791,1884,1073],{"class":870},[791,1886,1076],{"class":953},[791,1888,1136],{"class":870},[791,1890,1891,1893,1895,1897,1900,1903,1905,1909,1911],{"class":793,"line":947},[791,1892,1453],{"class":866},[791,1894,1225],{"class":978},[791,1896,981],{"class":990},[791,1898,1899],{"class":870},"{",[791,1901,1902],{"class":990}," server",[791,1904,994],{"class":870},[791,1906,1908],{"class":1907},"sfNiH"," true",[791,1910,878],{"class":870},[791,1912,1049],{"class":990},[791,1914,1915],{"class":793,"line":987},[791,1916,944],{"emptyLinePlaceholder":943},[791,1918,1919,1922,1924,1926,1929,1931,1933,1935,1937,1939],{"class":793,"line":1009},[791,1920,1921],{"class":978},"  it",[791,1923,981],{"class":990},[791,1925,1039],{"class":870},[791,1927,1928],{"class":799},"serves the German page",[791,1930,1039],{"class":870},[791,1932,923],{"class":870},[791,1934,1442],{"class":953},[791,1936,1073],{"class":870},[791,1938,1076],{"class":953},[791,1940,1136],{"class":870},[791,1942,1943,1946,1948,1951,1953,1955,1957,1960,1962,1965,1967,1970,1972,1974,1977,1979],{"class":793,"line":358},[791,1944,1945],{"class":978},"    expect",[791,1947,981],{"class":990},[791,1949,1950],{"class":866},"await",[791,1952,1815],{"class":978},[791,1954,981],{"class":990},[791,1956,1039],{"class":870},[791,1958,1959],{"class":799},"\u002Fde",[791,1961,1039],{"class":870},[791,1963,1964],{"class":990},"))",[791,1966,765],{"class":870},[791,1968,1969],{"class":978},"toContain",[791,1971,981],{"class":990},[791,1973,1039],{"class":870},[791,1975,1976],{"class":799},"lang=\"de-DE\"",[791,1978,1039],{"class":870},[791,1980,1049],{"class":990},[791,1982,1983,1986],{"class":793,"line":6},[791,1984,1985],{"class":870},"  }",[791,1987,1049],{"class":990},[791,1989,1990],{"class":793,"line":1052},[791,1991,944],{"emptyLinePlaceholder":943},[791,1993,1994,1996,1998,2000,2003,2005,2007,2009,2011,2013],{"class":793,"line":1057},[791,1995,1921],{"class":978},[791,1997,981],{"class":990},[791,1999,1039],{"class":870},[791,2001,2002],{"class":799},"redirects \u002F for a German browser",[791,2004,1039],{"class":870},[791,2006,923],{"class":870},[791,2008,1442],{"class":953},[791,2010,1073],{"class":870},[791,2012,1076],{"class":953},[791,2014,1136],{"class":870},[791,2016,2017,2020,2023,2025,2027,2029,2031,2033,2036,2038,2040,2042,2045,2047,2049,2051,2054,2056,2058,2060,2062,2064,2067,2070,2072,2074,2077,2079,2081],{"class":793,"line":1520},[791,2018,2019],{"class":953},"    const",[791,2021,2022],{"class":874}," res",[791,2024,975],{"class":870},[791,2026,1508],{"class":866},[791,2028,1820],{"class":978},[791,2030,981],{"class":990},[791,2032,1039],{"class":870},[791,2034,2035],{"class":799},"\u002F",[791,2037,1039],{"class":870},[791,2039,923],{"class":870},[791,2041,871],{"class":870},[791,2043,2044],{"class":990}," headers",[791,2046,994],{"class":870},[791,2048,871],{"class":870},[791,2050,884],{"class":870},[791,2052,2053],{"class":990},"accept-language",[791,2055,1039],{"class":870},[791,2057,994],{"class":870},[791,2059,884],{"class":870},[791,2061,1462],{"class":799},[791,2063,1039],{"class":870},[791,2065,2066],{"class":870}," },",[791,2068,2069],{"class":990}," redirect",[791,2071,994],{"class":870},[791,2073,884],{"class":870},[791,2075,2076],{"class":799},"manual",[791,2078,1039],{"class":870},[791,2080,878],{"class":870},[791,2082,1049],{"class":990},[791,2084,2085,2087,2089,2092,2094,2097,2099,2102,2104,2106,2109,2111,2113,2115,2117,2119,2121,2123,2125],{"class":793,"line":1559},[791,2086,1945],{"class":978},[791,2088,981],{"class":990},[791,2090,2091],{"class":874},"res",[791,2093,765],{"class":870},[791,2095,2096],{"class":874},"headers",[791,2098,765],{"class":870},[791,2100,2101],{"class":978},"get",[791,2103,981],{"class":990},[791,2105,1039],{"class":870},[791,2107,2108],{"class":799},"location",[791,2110,1039],{"class":870},[791,2112,1964],{"class":990},[791,2114,765],{"class":870},[791,2116,1541],{"class":978},[791,2118,981],{"class":990},[791,2120,1039],{"class":870},[791,2122,1959],{"class":799},[791,2124,1039],{"class":870},[791,2126,1049],{"class":990},[791,2128,2130,2132],{"class":793,"line":2129},15,[791,2131,1985],{"class":870},[791,2133,1049],{"class":990},[791,2135,2137,2139],{"class":793,"line":2136},16,[791,2138,972],{"class":870},[791,2140,1049],{"class":874},[748,2142,2143,2144,2147,2148,2151,2152,2154,2155,2157],{},"The second test assumes ",[752,2145,2146],{},"prefix"," (or ",[752,2149,2150],{},"prefix_except_default"," with another default locale); see ",[770,2153,57],{"href":58}," for when ",[752,2156,2035],{}," redirects.",[773,2159,2161],{"id":2160},"related","Related",[2163,2164,2165,2169,2172,2175],"card-group",{},[2166,2167],"card",{"icon":2168,"title":331,"to":332},"i-lucide-git-pull-request",[2166,2170],{"icon":2171,"title":283,"to":284},"i-lucide-braces",[2166,2173],{"icon":2174,"title":57,"to":58},"i-lucide-book-open",[2166,2176],{"icon":2174,"title":120,"to":121},[2178,2179,2180],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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":787,"searchDepth":863,"depth":863,"links":2182},[2183,2184,2185,2186,2187,2188],{"id":775,"depth":863,"text":776},{"id":846,"depth":863,"text":847},{"id":1202,"depth":863,"text":1203},{"id":1632,"depth":863,"text":1633},{"id":1789,"depth":863,"text":1790},{"id":2160,"depth":863,"text":2161},"Unit-test components that use $t with @i18n-micro\u002Ftest-utils and Vitest, and check localized pages end to end.","md","2026-11-04T00:40:16+04:00",null,{"outline":2194},[863,892],{"order":118,"group":108},{"title":115,"description":2189},"_kml7hRqpDzqTTui9n4bVDrp-_ZTAfC-8rDwHrFn6rI",[2199,2201],{"title":110,"path":111,"description":2200},"Check translations in CI, find unused keys, fill gaps through a translation service and exchange files with translators from the command line.",{"title":120,"path":121,"description":2202},"Render components that use $t in Storybook for Nuxt by serving pre-merged translation payloads as static files.",1794131154608]