[{"data":1,"prerenderedAt":3018},["ShallowReactive",2],{"navigation":3,"v3-navigation":411,"\u002Fguide\u002Fcli":738,"\u002Fguide\u002Fcli-surround":3013},[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":110,"body":740,"description":3004,"extension":3005,"lastUpdated":3006,"links":3007,"meta":3008,"navigation":3010,"path":111,"seo":3011,"stem":112,"__hash__":3012},"docs\u002Fguide\u002Fcli.md",{"type":741,"value":742,"toc":2987},"minimark",[743,746,769,778,838,877,889,914,919,931,936,1030,1062,1065,1109,1112,1155,1159,1235,1250,1270,1275,1290,1335,1391,1394,1441,1448,1453,1483,1488,1527,1562,1566,1622,1641,1803,1833,1843,1857,1943,1947,1973,2029,2036,2060,2065,2069,2112,2121,2135,2144,2148,2181,2196,2222,2233,2249,2255,2259,2268,2313,2334,2400,2403,2407,2677,2725,2760,2764,2965,2969,2983],[744,745,110],"h1",{"id":214},[747,748,749,753,754,757,758,757,761,764,765,768],"p",{},[750,751,752],"code",{},"@i18n-micro\u002Fcli"," manages the locale files of a Nuxt project. It reads ",[750,755,756],{},"locales",", ",[750,759,760],{},"defaultLocale",[750,762,763],{},"translationDir"," and your layers from ",[750,766,767],{},"nuxt.config",", so it needs no configuration of its own.",[747,770,771],{},[772,773],"img",{"alt":774,"height":775,"src":776,"width":777},"A terminal running i18n-micro check, which lists a missing, an undefined and four unused keys and fails, then extract, which adds the undefined key, then clean --dryRun, which lists the four keys it would remove",640,"\u002Fcli\u002Fdemo.gif",1200,[779,780,781,794],"table",{},[782,783,784],"thead",{},[785,786,787,791],"tr",{},[788,789,790],"th",{},"Command",[788,792,793],{},"Use it to",[795,796,797,808,818,828],"tbody",{},[785,798,799,805],{},[800,801,802],"td",{},[750,803,804],{},"check",[800,806,807],{},"Fail a build on anything wrong with the locale files",[785,809,810,815],{},[800,811,812],{},[750,813,814],{},"translate",[800,816,817],{},"Fill missing keys through a translation service",[785,819,820,825],{},[800,821,822],{},[750,823,824],{},"clean",[800,826,827],{},"Remove keys nothing uses",[785,829,830,835],{},[800,831,832],{},[750,833,834],{},"rename",[800,836,837],{},"Move a key, or a whole namespace, everywhere at once",[839,840,845],"pre",{"className":841,"code":842,"language":843,"meta":844,"style":844},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -D @i18n-micro\u002Fcli\nnpx i18n-micro --help\n","bash","",[750,846,847,865],{"__ignoreMap":844},[848,849,851,855,859,862],"span",{"class":850,"line":353},"line",[848,852,854],{"class":853},"sBMFI","npm",[848,856,858],{"class":857},"sfazB"," install",[848,860,861],{"class":857}," -D",[848,863,864],{"class":857}," @i18n-micro\u002Fcli\n",[848,866,868,871,874],{"class":850,"line":867},2,[848,869,870],{"class":853},"npx",[848,872,873],{"class":857}," i18n-micro",[848,875,876],{"class":857}," --help\n",[747,878,879,880,883,884,888],{},"Run it from the app root, or point at it with ",[750,881,882],{},"--cwd",". Every flag of every command is on the ",[885,886,887],"a",{"href":194},"command reference",".",[890,891,892],"tip",{},[747,893,894,898,899,901,902,905,906,909,910,888],{},[895,896,897],"strong",{},"Moving from nuxt-i18n-micro-cli?"," ",[750,900,752],{}," replaces it; the bins ",[750,903,904],{},"i18n-micro"," and ",[750,907,908],{},"i18n-micro-cli"," stay. See the ",[885,911,913],{"href":912},"#moving-from-nuxt-i18n-micro-cli","table of old commands",[915,916,918],"h2",{"id":917},"use-it-in-ci","Use it in CI",[839,920,922],{"className":841,"code":921,"language":843,"meta":844,"style":844},"i18n-micro check\n",[750,923,924],{"__ignoreMap":844},[848,925,926,928],{"class":850,"line":353},[848,927,904],{"class":853},[848,929,930],{"class":857}," check\n",[747,932,933,935],{},[750,934,804],{}," is the gate. It reports:",[779,937,938,948],{},[782,939,940],{},[785,941,942,945],{},[788,943,944],{},"Check",[788,946,947],{},"Means",[795,949,950,960,974,984,997,1007,1017],{},[785,951,952,957],{},[800,953,954],{},[750,955,956],{},"missing",[800,958,959],{},"A key of the default locale is absent from a locale",[785,961,962,967],{},[800,963,964],{},[750,965,966],{},"empty",[800,968,969,970,973],{},"A value is ",[750,971,972],{},"''",". The app shows a blank, not the fallback",[785,975,976,981],{},[800,977,978],{},[750,979,980],{},"extra",[800,982,983],{},"A locale has a key the default locale does not",[785,985,986,991],{},[800,987,988],{},[750,989,990],{},"placeholders",[800,992,993,996],{},[750,994,995],{},"{name}"," was lost or added, or a plural lost its forms",[785,998,999,1004],{},[800,1000,1001],{},[750,1002,1003],{},"undefined",[800,1005,1006],{},"The code uses a key the default locale does not have",[785,1008,1009,1014],{},[800,1010,1011],{},[750,1012,1013],{},"unused",[800,1015,1016],{},"Nothing in the project uses a key",[785,1018,1019,1024],{},[800,1020,1021],{},[750,1022,1023],{},"duplicates",[800,1025,1026,1027],{},"The same text under different keys. Off by default: pass ",[750,1028,1029],{},"--duplicates",[1031,1032,1033,1044,1050,1056],"ul",{},[1034,1035,1036,1039,1040,1043],"li",{},[750,1037,1038],{},"--only missing,placeholders"," runs some checks; a check named in ",[750,1041,1042],{},"--only"," that could not run fails.",[1034,1045,1046,1049],{},[750,1047,1048],{},"--json"," gives a report for tooling.",[1034,1051,1052,1055],{},[750,1053,1054],{},"--ignore"," skips source files.",[1034,1057,1058,1059,1061],{},"While keys are computed at runtime, ",[750,1060,1013],{}," is skipped and the report says why.",[747,1063,1064],{},"Every command exits with one of three codes, so a pipeline can tell a problem with your translations from a problem with the tool:",[779,1066,1067,1077],{},[782,1068,1069],{},[785,1070,1071,1074],{},[788,1072,1073],{},"Exit code",[788,1075,1076],{},"Meaning",[795,1078,1079,1089,1099],{},[785,1080,1081,1086],{},[800,1082,1083],{},[750,1084,1085],{},"0",[800,1087,1088],{},"Nothing to report",[785,1090,1091,1096],{},[800,1092,1093],{},[750,1094,1095],{},"1",[800,1097,1098],{},"Findings",[785,1100,1101,1106],{},[800,1102,1103],{},[750,1104,1105],{},"2",[800,1107,1108],{},"The command could not run: a usage error, a broken file, a failed request",[747,1110,1111],{},"Other commands worth a CI step:",[839,1113,1115],{"className":841,"code":1114,"language":843,"meta":844,"style":844},"i18n-micro format --check      # fails if a file is not formatted\ni18n-micro lint                # stray spaces, empty values, your own regex rules\ni18n-micro stats --baseRef main\n",[750,1116,1117,1131,1141],{"__ignoreMap":844},[848,1118,1119,1121,1124,1127],{"class":850,"line":353},[848,1120,904],{"class":853},[848,1122,1123],{"class":857}," format",[848,1125,1126],{"class":857}," --check",[848,1128,1130],{"class":1129},"sHwdD","      # fails if a file is not formatted\n",[848,1132,1133,1135,1138],{"class":850,"line":867},[848,1134,904],{"class":853},[848,1136,1137],{"class":857}," lint",[848,1139,1140],{"class":1129},"                # stray spaces, empty values, your own regex rules\n",[848,1142,1144,1146,1149,1152],{"class":850,"line":1143},3,[848,1145,904],{"class":853},[848,1147,1148],{"class":857}," stats",[848,1150,1151],{"class":857}," --baseRef",[848,1153,1154],{"class":857}," main\n",[915,1156,1158],{"id":1157},"keep-locales-in-step","Keep locales in step",[779,1160,1161,1170],{},[782,1162,1163],{},[785,1164,1165,1167],{},[788,1166,790],{},[788,1168,1169],{},"What it does",[795,1171,1172,1186,1200,1211,1221],{},[785,1173,1174,1179],{},[800,1175,1176],{},[750,1177,1178],{},"extract",[800,1180,1181,1182,1185],{},"Lists the keys the code uses that have no text yet. A default text, as in ",[750,1183,1184],{},"$t('key', {}, 'Welcome')",", goes to the default locale.",[785,1187,1188,1193],{},[800,1189,1190],{},[750,1191,1192],{},"sync",[800,1194,1195,1196,1199],{},"Removes keys the default locale does not have. Try ",[750,1197,1198],{},"--dryRun"," first.",[785,1201,1202,1206],{},[800,1203,1204],{},[750,1205,824],{},[800,1207,1208,1209,1199],{},"Removes keys nothing uses. Try ",[750,1210,1198],{},[785,1212,1213,1218],{},[800,1214,1215],{},[750,1216,1217],{},"search",[800,1219,1220],{},"Finds keys and values, and shows where each key is used.",[785,1222,1223,1228],{},[800,1224,1225],{},[750,1226,1227],{},"stats",[800,1229,1230,1231,1234],{},"Completion per locale; ",[750,1232,1233],{},"--baseRef main"," compares with a git ref.",[747,1236,1237,1239,1240,1242,1243,1246,1247,888],{},[750,1238,1192],{}," stops like ",[750,1241,824],{}," does when it would remove a key it cannot prove unused, and also when the default locale has nothing to compare with. With nothing to remove it never stops, so ",[750,1244,1245],{},"$t(item.label)"," alone is no reason for ",[750,1248,1249],{},"--force",[1251,1252,1253],"note",{},[747,1254,1255,905,1257,1259,1260,1262,1263,1266,1267,1269],{},[750,1256,1178],{},[750,1258,1192],{}," never write ",[750,1261,972],{}," for a key without a translation. The key stays absent, so ",[750,1264,1265],{},"fallbackLocale"," applies at runtime and ",[750,1268,804],{}," reports it. An empty string would be a defined value and show a blank.",[1271,1272,1274],"h3",{"id":1273},"what-the-commands-read","What the commands read",[747,1276,1277,757,1279,757,1281,757,1283,757,1285,905,1287,1289],{},[750,1278,804],{},[750,1280,1178],{},[750,1282,1192],{},[750,1284,824],{},[750,1286,1217],{},[750,1288,834],{}," read source code across the whole project, not a fixed list of folders:",[1031,1291,1292,1305,1317],{},[1034,1293,1294,1297,1298,1301,1302,1304],{},[895,1295,1296],{},"Read:"," templates and scripts through a parser, ",[750,1299,1300],{},".html"," and Pug as text, every layer, and folders outside the root that an alias or ",[750,1303,301],{}," points at.",[1034,1306,1307,898,1310,1313,1314,888],{},[895,1308,1309],{},"Skipped:",[750,1311,1312],{},"node_modules",", build output and the locale files. Add your own with ",[750,1315,1316],{},"--ignore 'legacy\u002F**,*.stories.ts'",[1034,1318,1319,1322,1323,905,1325,1328,1329,1331,1332,1334],{},[895,1320,1321],{},"Test code"," counts as usage, so ",[750,1324,824],{},[750,1326,1327],{},"check --only unused"," keep a key only a test reads. It never adds a key: ",[750,1330,1178],{}," skips such keys, and ",[750,1333,804],{}," does not report them as undefined.",[747,1336,1337,1338,757,1341,757,1344,757,1347,757,1350,905,1353,1356,1357,905,1360,1363,1364,757,1367,757,1370,757,1373,757,1376,757,1379,1382,1383,1386,1387,1390],{},"Test code means the root folders ",[750,1339,1340],{},"tests",[750,1342,1343],{},"test",[750,1345,1346],{},"__tests__",[750,1348,1349],{},"e2e",[750,1351,1352],{},"cypress",[750,1354,1355],{},"playwright",", plus ",[750,1358,1359],{},".spec",[750,1361,1362],{},".test"," JavaScript and TypeScript files (",[750,1365,1366],{},".ts",[750,1368,1369],{},".tsx",[750,1371,1372],{},".mts",[750,1374,1375],{},".js",[750,1377,1378],{},".jsx",[750,1380,1381],{},".mjs"," and the like) anywhere. Only the root folders are exempt from the doubts below: ",[750,1384,1385],{},"pages\u002Ftests\u002F[id].vue"," is a page like any other, and so are ",[750,1388,1389],{},"public\u002F"," and minified files, whose code is not part of the app.",[747,1392,1393],{},"The commands recognise:",[1031,1395,1396,1414,1426,1435],{},[1034,1397,1398,757,1401,757,1404,757,1407,905,1410,1413],{},[750,1399,1400],{},"$t",[750,1402,1403],{},"$ts",[750,1405,1406],{},"$tc",[750,1408,1409],{},"$has",[750,1411,1412],{},"$_t(route)",";",[1034,1415,1416,1419,1420,905,1423,1413],{},[750,1417,1418],{},"t()"," from ",[750,1421,1422],{},"useI18n()",[750,1424,1425],{},"useTranslationServerMiddleware()",[1034,1427,1428,1431,1432,1413],{},[750,1429,1430],{},"\u003Ci18n-t keypath>"," in templates and JSX, and ",[750,1433,1434],{},"\u003Ci18n-group prefix>",[1034,1436,1437,1438,888],{},"aliases such as ",[750,1439,1440],{},"const { t: tr } = useI18n()",[1271,1442,1444,1445,1447],{"id":1443},"how-clean-decides","How ",[750,1446,824],{}," decides",[747,1449,1450,1452],{},[750,1451,824],{}," would rather leave a dead key than remove a live one. A key stays when any of this is true:",[1031,1454,1455,1458,1467,1470,1480],{},[1034,1456,1457],{},"a call uses it, or a key below or above it;",[1034,1459,1460,1461,757,1464,1413],{},"a string in the code equals it: ",[750,1462,1463],{},"const key = 'menu.home'",[750,1465,1466],{},"\u003CItem label=\"menu.home\" \u002F>",[1034,1468,1469],{},"a JSON, YAML or Markdown file in the project contains it;",[1034,1471,1472,1473,1476,1477,1413],{},"a computed key has a static start that covers it: ",[750,1474,1475],{},"$t(`status.${state}`)"," keeps everything under ",[750,1478,1479],{},"status.",[1034,1481,1482],{},"a layer defines it.",[747,1484,1485,1487],{},[750,1486,824],{}," stops without changing anything when it cannot know, and lists why:",[1031,1489,1490,1503,1511,1518,1521,1524],{},[1034,1491,1492,1493,757,1496,1499,1500,1413],{},"a key is fully computed, as in ",[750,1494,1495],{},"$t(name)",[750,1497,1498],{},"\u003Ci18n-t :keypath=\"name\" \u002F>"," or ",[750,1501,1502],{},"\u003Ci18n-t v-bind=\"props\" \u002F>",[1034,1504,1505,1507,1508,1413],{},[750,1506,1400],{}," is passed around as a value, as in ",[750,1509,1510],{},"items.map($t)",[1034,1512,1513,1514,1517],{},"a function called ",[750,1515,1516],{},"t"," gets a computed argument and comes from a parameter, an import or a call: it may be a wrapper around the real one. A function the same file defines does not count, because a wrapper would have its own call inside;",[1034,1519,1520],{},"a source file does not parse;",[1034,1522,1523],{},"no file uses any key at all, which usually means it is looking in the wrong place;",[1034,1525,1526],{},"a locale file is a symlink out of the project, so another app may read it.",[1528,1529,1531,1536,1543,1547,1553,1557],"steps",{"level":1530},"4",[1532,1533,1535],"h4",{"id":1534},"preview","Preview",[747,1537,1538,1539,1542],{},"Run ",[750,1540,1541],{},"i18n-micro clean --dryRun"," and review what it lists.",[1532,1544,1546],{"id":1545},"protect-keys","Protect keys",[747,1548,1549,1550,888],{},"Keep keys that only look unused with ",[750,1551,1552],{},"--exclude '^errors\\.'",[1532,1554,1556],{"id":1555},"remove","Remove",[747,1558,1559,1560,888],{},"Run it again with ",[750,1561,1249],{},[915,1563,1565],{"id":1564},"translate-missing-keys","Translate missing keys",[839,1567,1569],{"className":841,"code":1568,"language":843,"meta":844,"style":844},"i18n-micro translate --dryRun                     # keys and characters per locale, nothing sent\nexport I18N_TRANSLATE_TOKEN=...                   # or put it in .env\ni18n-micro translate --service deepl --locale de,fr\n",[750,1570,1571,1584,1604],{"__ignoreMap":844},[848,1572,1573,1575,1578,1581],{"class":850,"line":353},[848,1574,904],{"class":853},[848,1576,1577],{"class":857}," translate",[848,1579,1580],{"class":857}," --dryRun",[848,1582,1583],{"class":1129},"                     # keys and characters per locale, nothing sent\n",[848,1585,1586,1590,1594,1598,1601],{"class":850,"line":867},[848,1587,1589],{"class":1588},"spNyl","export",[848,1591,1593],{"class":1592},"sTEyZ"," I18N_TRANSLATE_TOKEN",[848,1595,1597],{"class":1596},"sMK4o","=",[848,1599,1600],{"class":1592},"...                   ",[848,1602,1603],{"class":1129},"# or put it in .env\n",[848,1605,1606,1608,1610,1613,1616,1619],{"class":850,"line":1143},[848,1607,904],{"class":853},[848,1609,1577],{"class":857},[848,1611,1612],{"class":857}," --service",[848,1614,1615],{"class":857}," deepl",[848,1617,1618],{"class":857}," --locale",[848,1620,1621],{"class":857}," de,fr\n",[1031,1623,1624,1633,1638],{},[1034,1625,1626,1628,1629,1632],{},[750,1627,814],{}," fills keys that are missing or empty; ",[750,1630,1631],{},"--replace"," translates everything again.",[1034,1634,1635,1636,888],{},"Placeholders and plural forms are protected. A translation that lost a placeholder is not written: the key is listed and the command exits ",[750,1637,1095],{},[1034,1639,1640],{},"Every batch is saved before the next request goes out, so a failure costs only the request that failed.",[779,1642,1643,1666],{},[782,1644,1645],{},[785,1646,1647,1652,1655,1660],{},[788,1648,1649],{},[750,1650,1651],{},"--service",[788,1653,1654],{},"Service",[788,1656,1657],{},[750,1658,1659],{},"--token",[788,1661,1662,1663],{},"Useful ",[750,1664,1665],{},"--options",[795,1667,1668,1704,1722,1746,1763,1780],{},[785,1669,1670,1675,1678,1690],{},[800,1671,1672],{},[750,1673,1674],{},"ai",[800,1676,1677],{},"Vercel AI Gateway, OpenAI, Anthropic or any OpenAI-compatible server",[800,1679,1680,1681,757,1684,757,1687],{},"API key, or ",[750,1682,1683],{},"AI_GATEWAY_API_KEY",[750,1685,1686],{},"OPENAI_API_KEY",[750,1688,1689],{},"ANTHROPIC_API_KEY",[800,1691,1692,757,1695,757,1698,757,1701],{},[750,1693,1694],{},"provider",[750,1696,1697],{},"model",[750,1699,1700],{},"baseUrl",[750,1702,1703],{},"maxTokens",[785,1705,1706,1711,1714,1717],{},[800,1707,1708],{},[750,1709,1710],{},"azure",[800,1712,1713],{},"Azure Translator",[800,1715,1716],{},"Subscription key",[800,1718,1719],{},[750,1720,1721],{},"region",[785,1723,1724,1729,1732,1735],{},[800,1725,1726],{},[750,1727,1728],{},"deepl",[800,1730,1731],{},"DeepL, Free keys included",[800,1733,1734],{},"Auth key",[800,1736,1737,757,1740,757,1743],{},[750,1738,1739],{},"formality",[750,1741,1742],{},"glossaryId",[750,1744,1745],{},"context",[785,1747,1748,1753,1756,1759],{},[800,1749,1750],{},[750,1751,1752],{},"google",[800,1754,1755],{},"Google Cloud Translation v2",[800,1757,1758],{},"API key",[800,1760,1761],{},[750,1762,1697],{},[785,1764,1765,1770,1773,1776],{},[800,1766,1767],{},[750,1768,1769],{},"libretranslate",[800,1771,1772],{},"LibreTranslate",[800,1774,1775],{},"Optional",[800,1777,1778],{},[750,1779,1700],{},[785,1781,1782,1787,1790,1796],{},[800,1783,1784],{},[750,1785,1786],{},"yandexcloud",[800,1788,1789],{},"Yandex Cloud Translate",[800,1791,1792,1793],{},"API key, or IAM token with ",[750,1794,1795],{},"authScheme:Bearer",[800,1797,1798,757,1801],{},[750,1799,1800],{},"folderId",[750,1802,1697],{},[747,1804,1805,1806,1809,1810,1813,1814,757,1816,757,1819,905,1822,1825,1826,1499,1829,1832],{},"Options are ",[750,1807,1808],{},"key:value"," pairs: ",[750,1811,1812],{},"--options provider:openai,model:gpt-4o-mini",". All services also take ",[750,1815,1700],{},[750,1817,1818],{},"retries",[750,1820,1821],{},"retryDelayMs",[750,1823,1824],{},"timeoutMs",". A translation request may already be billed, so it is repeated only after a ",[750,1827,1828],{},"429",[750,1830,1831],{},"503",", and not when the service asks to wait more than a minute.",[1834,1835,1836],"warning",{},[747,1837,1838,1839,1842],{},"Flags are visible in shell history and process lists, so pass the token through the environment variable. The CLI masks what it knows to be secret wherever it prints it, ",[750,1840,1841],{},"--debug"," included: tokens, provider keys, Basic credentials, and the query and credentials of a URL you configured. A server that reformats a key before echoing it is out of its reach, so treat logs of a failed run with care.",[747,1844,1845,1846,1848,1849,1852,1853,1856],{},"The ",[750,1847,1674],{}," service follows a glossary. When ",[750,1850,1851],{},".i18n-glossary.json"," exists it is used without a flag; ",[750,1854,1855],{},"--glossaryFile"," picks another file.",[839,1858,1862],{"className":1859,"code":1860,"filename":1851,"language":1861,"meta":844,"style":844},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ \"entries\": [{ \"source\": \"Cart\", \"target\": \"Warenkorb\", \"to\": \"de\" }] }\n","json",[750,1863,1864],{"__ignoreMap":844},[848,1865,1866,1869,1872,1875,1878,1881,1884,1886,1889,1891,1893,1895,1898,1900,1903,1905,1908,1910,1912,1914,1917,1919,1921,1923,1926,1928,1930,1932,1935,1937,1940],{"class":850,"line":353},[848,1867,1868],{"class":1596},"{",[848,1870,1871],{"class":1596}," \"",[848,1873,1874],{"class":1588},"entries",[848,1876,1877],{"class":1596},"\"",[848,1879,1880],{"class":1596},":",[848,1882,1883],{"class":1596}," [{",[848,1885,1871],{"class":1596},[848,1887,1888],{"class":853},"source",[848,1890,1877],{"class":1596},[848,1892,1880],{"class":1596},[848,1894,1871],{"class":1596},[848,1896,1897],{"class":857},"Cart",[848,1899,1877],{"class":1596},[848,1901,1902],{"class":1596},",",[848,1904,1871],{"class":1596},[848,1906,1907],{"class":853},"target",[848,1909,1877],{"class":1596},[848,1911,1880],{"class":1596},[848,1913,1871],{"class":1596},[848,1915,1916],{"class":857},"Warenkorb",[848,1918,1877],{"class":1596},[848,1920,1902],{"class":1596},[848,1922,1871],{"class":1596},[848,1924,1925],{"class":853},"to",[848,1927,1877],{"class":1596},[848,1929,1880],{"class":1596},[848,1931,1871],{"class":1596},[848,1933,1934],{"class":857},"de",[848,1936,1877],{"class":1596},[848,1938,1939],{"class":1596}," }]",[848,1941,1942],{"class":1596}," }\n",[915,1944,1946],{"id":1945},"turn-hardcoded-text-into-keys","Turn hardcoded text into keys",[839,1948,1950],{"className":841,"code":1949,"language":843,"meta":844,"style":844},"i18n-micro text-to-i18n --dryRun   # list what would change\ni18n-micro text-to-i18n            # rewrite the templates\n",[750,1951,1952,1964],{"__ignoreMap":844},[848,1953,1954,1956,1959,1961],{"class":850,"line":353},[848,1955,904],{"class":853},[848,1957,1958],{"class":857}," text-to-i18n",[848,1960,1580],{"class":857},[848,1962,1963],{"class":1129},"   # list what would change\n",[848,1965,1966,1968,1970],{"class":850,"line":867},[848,1967,904],{"class":853},[848,1969,1958],{"class":857},[848,1971,1972],{"class":1129},"            # rewrite the templates\n",[839,1974,1977],{"className":1975,"code":1976,"language":274,"meta":844,"style":844},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- before -->\n\u003Ch1>Welcome to our site\u003C\u002Fh1>\n\u003C!-- after -->\n\u003Ch1>{{ $t('pages.index.welcome-to-our') }}\u003C\u002Fh1>\n",[750,1978,1979,1984,2006,2011],{"__ignoreMap":844},[848,1980,1981],{"class":850,"line":353},[848,1982,1983],{"class":1129},"\u003C!-- before -->\n",[848,1985,1986,1989,1992,1995,1998,2001,2003],{"class":850,"line":867},[848,1987,1988],{"class":1596},"\u003C",[848,1990,744],{"class":1991},"swJcz",[848,1993,1994],{"class":1596},">",[848,1996,1997],{"class":1592},"Welcome to our site",[848,1999,2000],{"class":1596},"\u003C\u002F",[848,2002,744],{"class":1991},[848,2004,2005],{"class":1596},">\n",[848,2007,2008],{"class":850,"line":1143},[848,2009,2010],{"class":1129},"\u003C!-- after -->\n",[848,2012,2014,2016,2018,2020,2023,2025,2027],{"class":850,"line":2013},4,[848,2015,1988],{"class":1596},[848,2017,744],{"class":1991},[848,2019,1994],{"class":1596},[848,2021,2022],{"class":1592},"{{ $t('pages.index.welcome-to-our') }}",[848,2024,2000],{"class":1596},[848,2026,744],{"class":1991},[848,2028,2005],{"class":1596},[747,2030,2031,2032,2035],{},"Only ",[750,2033,2034],{},".vue"," templates of the project itself are rewritten, not those of a layer or an alias target. Every rewritten file is parsed again before it is written. These are listed and keep their text:",[1031,2037,2038,2047,2054,2057],{},[1034,2039,2040,2041,2043,2044,2046],{},"text in ",[750,2042,1366],{}," files and scripts, because ",[750,2045,1400],{}," is not in scope everywhere;",[1034,2048,2049,2050,2053],{},"text next to markup or an interpolation, such as ",[750,2051,2052],{},"\u003Cp>Hello \u003Cb>world\u003C\u002Fb> today\u003C\u002Fp>",": half a sentence cannot be translated on its own;",[1034,2055,2056],{},"a generated key that would collide with another, as a parent page and its child can;",[1034,2058,2059],{},"a known key that cannot go between quotes.",[1834,2061,2062],{},[747,2063,2064],{},"Commit first, and review the diff.",[915,2066,2068],{"id":2067},"rename-a-key","Rename a key",[839,2070,2072],{"className":841,"code":2071,"language":843,"meta":844,"style":844},"i18n-micro rename --from common.save --to actions.save\ni18n-micro rename --from settings --to account.settings   # a whole namespace\n",[750,2073,2074,2093],{"__ignoreMap":844},[848,2075,2076,2078,2081,2084,2087,2090],{"class":850,"line":353},[848,2077,904],{"class":853},[848,2079,2080],{"class":857}," rename",[848,2082,2083],{"class":857}," --from",[848,2085,2086],{"class":857}," common.save",[848,2088,2089],{"class":857}," --to",[848,2091,2092],{"class":857}," actions.save\n",[848,2094,2095,2097,2099,2101,2104,2106,2109],{"class":850,"line":867},[848,2096,904],{"class":853},[848,2098,2080],{"class":857},[848,2100,2083],{"class":857},[848,2102,2103],{"class":857}," settings",[848,2105,2089],{"class":857},[848,2107,2108],{"class":857}," account.settings",[848,2110,2111],{"class":1129},"   # a whole namespace\n",[747,2113,2114,2116,2117,2120],{},[750,2115,834],{}," edits the syntax tree, so comments and unrelated strings stay as they are, and aliases and ",[750,2118,2119],{},":keypath"," are followed. A layer's own file is never changed. It warns about what it cannot rewrite, and leaves it alone:",[1031,2122,2123,2126,2129,2132],{},[1034,2124,2125],{},"a computed key under the old name;",[1034,2127,2128],{},"each plain string equal to it;",[1034,2130,2131],{},"a Pug template;",[1034,2133,2134],{},"a source in a layer or in a folder outside the project.",[747,2136,2137,2140,2141,888],{},[750,2138,2139],{},"--to"," has to be a key that can be written in code: no quotes, no backslash, no empty segment, no ",[750,2142,2143],{},"__proto__",[915,2145,2147],{"id":2146},"exchange-files-with-translators","Exchange files with translators",[839,2149,2151],{"className":841,"code":2150,"language":843,"meta":844,"style":844},"i18n-micro export --format csv\ni18n-micro import --format csv --dryRun\n",[750,2152,2153,2166],{"__ignoreMap":844},[848,2154,2155,2157,2160,2163],{"class":850,"line":353},[848,2156,904],{"class":853},[848,2158,2159],{"class":857}," export",[848,2161,2162],{"class":857}," --format",[848,2164,2165],{"class":857}," csv\n",[848,2167,2168,2170,2173,2175,2178],{"class":850,"line":867},[848,2169,904],{"class":853},[848,2171,2172],{"class":857}," import",[848,2174,2162],{"class":857},[848,2176,2177],{"class":857}," csv",[848,2179,2180],{"class":857}," --dryRun\n",[747,2182,2183,2187,2188,2191,2192,2195],{},[895,2184,2185],{},[750,2186,1589],{}," writes every key of every locale, untranslated ones included, with the default-locale text as the source: a ",[750,2189,2190],{},"Source"," column in CSV, a ",[750,2193,2194],{},"#."," comment in PO.",[1031,2197,2198,2212],{},[1034,2199,2200,2201,2204,2205,2208,2209,888],{},"Without ",[750,2202,2203],{},"--dir",", PO goes to ",[750,2206,2207],{},"pots"," and CSV to ",[750,2210,2211],{},"csv_exports",[1034,2213,2214,2215,2218,2219,2221],{},"It records what it wrote in ",[750,2216,2217],{},".i18n-export.json",", in the output folder. It stops when a file has changed since then and holds translations the locale files do not have, fuzzy PO entries included; ",[750,2220,1249],{}," overwrites them. Ordinary edits of the locale files do not stop it.",[747,2223,2224,2229,2230,888],{},[895,2225,2226],{},[750,2227,2228],{},"import"," merges, skips empty cells, and skips PO entries marked ",[750,2231,2232],{},"fuzzy",[1031,2234,2235,2240],{},[1034,2236,2237,2238,888],{},"A key that would overwrite a value, or a value over a whole group of keys, is listed and left out, and the command exits ",[750,2239,1095],{},[1034,2241,2242,2243,2245,2246,888],{},"It stops with exit ",[750,2244,1105],{}," on a catalog in an unexpected location, a page's catalog the last export did not write, a quote out of place in a CSV, or a page entry under ",[750,2247,2248],{},"disablePageLocales",[747,2250,2251,2252,2254],{},"For a translation platform, use its own CLI: the ",[885,2253,125],{"href":126}," setup syncs the JSON files, page files included.",[915,2256,2258],{"id":2257},"sync-with-your-own-endpoint","Sync with your own endpoint",[747,2260,2261,2264,2265,1880],{},[750,2262,2263],{},"sync-remote"," exchanges the global locale files with an HTTP endpoint you run. Page files stay local, and the command says so. Describe the endpoint in ",[750,2266,2267],{},".i18n-remote.json",[839,2269,2271],{"className":1859,"code":2270,"filename":2267,"language":1861,"meta":844,"style":844},"{ \"url\": \"https:\u002F\u002Ftranslations.example.com\", \"path\": \"translations\" }\n",[750,2272,2273],{"__ignoreMap":844},[848,2274,2275,2277,2279,2282,2284,2286,2288,2291,2293,2295,2297,2300,2302,2304,2306,2309,2311],{"class":850,"line":353},[848,2276,1868],{"class":1596},[848,2278,1871],{"class":1596},[848,2280,2281],{"class":1588},"url",[848,2283,1877],{"class":1596},[848,2285,1880],{"class":1596},[848,2287,1871],{"class":1596},[848,2289,2290],{"class":857},"https:\u002F\u002Ftranslations.example.com",[848,2292,1877],{"class":1596},[848,2294,1902],{"class":1596},[848,2296,1871],{"class":1596},[848,2298,2299],{"class":1588},"path",[848,2301,1877],{"class":1596},[848,2303,1880],{"class":1596},[848,2305,1871],{"class":1596},[848,2307,2308],{"class":857},"translations",[848,2310,1877],{"class":1596},[848,2312,1942],{"class":1596},[747,2314,2315,2316,905,2319,2322,2323,2326,2327,2330,2331,888],{},"The endpoint answers ",[750,2317,2318],{},"GET",[750,2320,2321],{},"PUT"," with a ",[750,2324,2325],{},"{ locale: messages }"," object. Authenticate with ",[750,2328,2329],{},"auth: { username, password }",", or put a bearer token in ",[750,2332,2333],{},"I18N_REMOTE_TOKEN",[779,2335,2336,2348],{},[782,2337,2338],{},[785,2339,2340,2342,2345],{},[788,2341],{},[788,2343,2344],{},"Pull",[788,2346,2347],{},"Push",[795,2349,2350,2361,2388],{},[785,2351,2352,2355,2358],{},[800,2353,2354],{},"What moves",[800,2356,2357],{},"Fills what you do not have and keeps keys only you have",[800,2359,2360],{},"Sends the project's own keys, not those of a layer, and leaves your blanks out",[785,2362,2363,2366,2375],{},[800,2364,2365],{},"Conflicts",[800,2367,2368,2369,2371,2372,2374],{},"A key that differs on both sides: nothing is written, exit ",[750,2370,1095],{},"; ",[750,2373,1249],{}," takes the remote value",[800,2376,2377,2378,2380,2381,2383,2384,2387],{},"A PUT replaces the document, so a push first reads the endpoint and stops with exit ",[750,2379,1095],{}," when it holds text you do not have; ",[750,2382,1249],{}," overwrites it. An endpoint that answers ",[750,2385,2386],{},"404"," has nothing to lose",[785,2389,2390,2394,2397],{},[800,2391,2392],{},[750,2393,1198],{},[800,2395,2396],{},"Reads from the endpoint, lists the changes, writes nothing",[800,2398,2399],{},"Says what would be sent, without contacting the endpoint",[747,2401,2402],{},"A locale you have not configured is skipped, and a blank remote value clears nothing.",[915,2404,2406],{"id":2405},"moving-from-nuxt-i18n-micro-cli","Moving from nuxt-i18n-micro-cli",[779,2408,2409,2419],{},[782,2410,2411],{},[785,2412,2413,2416],{},[788,2414,2415],{},"Old command",[788,2417,2418],{},"Now",[795,2420,2421,2432,2444,2456,2474,2488,2500,2515,2528,2548,2558,2569,2582,2596,2608,2621,2651,2667],{},[785,2422,2423,2428],{},[800,2424,2425],{},[750,2426,2427],{},"validate",[800,2429,2430],{},[750,2431,804],{},[785,2433,2434,2439],{},[800,2435,2436],{},[750,2437,2438],{},"diff",[800,2440,2441],{},[750,2442,2443],{},"check --only missing",[785,2445,2446,2451],{},[800,2447,2448],{},[750,2449,2450],{},"check-duplicates",[800,2452,2453],{},[750,2454,2455],{},"check --only duplicates",[785,2457,2458,2466],{},[800,2459,2460,757,2463],{},[750,2461,2462],{},"export-csv",[750,2464,2465],{},"import-csv",[800,2467,2468,757,2471],{},[750,2469,2470],{},"export --format csv",[750,2472,2473],{},"import --format csv",[785,2475,2476,2484],{},[800,2477,2478,757,2481],{},[750,2479,2480],{},"--potsDir",[750,2482,2483],{},"--csvDir",[800,2485,2486],{},[750,2487,2203],{},[785,2489,2490,2495],{},[800,2491,2492],{},[750,2493,2494],{},"estimate",[800,2496,2497],{},[750,2498,2499],{},"translate --dryRun",[785,2501,2502,2507],{},[800,2503,2504],{},[750,2505,2506],{},"glossary",[800,2508,2509,2510,2371,2512,2514],{},"Edit ",[750,2511,1851],{},[750,2513,814],{}," reads it by itself",[785,2516,2517,2525],{},[800,2518,2519,757,2522],{},[750,2520,2521],{},"backup",[750,2523,2524],{},"restore",[800,2526,2527],{},"Git, which already keeps your locale files",[785,2529,2530,2535],{},[800,2531,2532],{},[750,2533,2534],{},"init",[800,2536,2537,2540,2541,2544,2545],{},[750,2538,2539],{},"nuxi init",", then add ",[750,2542,2543],{},"nuxt-i18n-micro"," to ",[750,2546,2547],{},"modules",[785,2549,2550,2555],{},[800,2551,2552],{},[750,2553,2554],{},"split",[800,2556,2557],{},"Removed: the module does not read split files",[785,2559,2560,2565],{},[800,2561,2562],{},[750,2563,2564],{},"optimize",[800,2566,2567],{},[750,2568,2455],{},[785,2570,2571,2576],{},[800,2572,2573],{},[750,2574,2575],{},"replace-values",[800,2577,2578,2579],{},"Your editor or ",[750,2580,2581],{},"sed",[785,2583,2584,2589],{},[800,2585,2586],{},[750,2587,2588],{},"stats --full",[800,2590,2591,2371,2593,2595],{},[750,2592,1227],{},[885,2594,104],{"href":105}," has the details",[785,2597,2598,2603],{},[800,2599,2600],{},[750,2601,2602],{},"search --hardcodedOnly",[800,2604,2605],{},[750,2606,2607],{},"text-to-i18n --dryRun",[785,2609,2610,2618],{},[800,2611,2612,757,2615],{},[750,2613,2614],{},"search --preferUnused",[750,2616,2617],{},"--onlyVue",[800,2619,2620],{},"Removed",[785,2622,2623,2644],{},[800,2624,2625,2628,2629,757,2632,757,2635,757,2638,757,2641],{},[750,2626,2627],{},"lint"," rules ",[750,2630,2631],{},"no-html-tags",[750,2633,2634],{},"no-special-chars",[750,2636,2637],{},"no-mixed-case",[750,2639,2640],{},"no-missing-punctuation",[750,2642,2643],{},"no-inconsistent-pluralization",[800,2645,2646,2647,2650],{},"Removed: they flagged normal text. Write a ",[750,2648,2649],{},"customRegexRules"," entry if you need one",[785,2652,2653,2664],{},[800,2654,2655,757,2658,757,2661],{},[750,2656,2657],{},"text-to-i18n --extractOnlyDirs",[750,2659,2660],{},"--extractOnlyPatterns",[750,2662,2663],{},"--verbose",[800,2665,2666],{},"Removed: code is never rewritten",[785,2668,2669,2674],{},[800,2670,2671],{},[750,2672,2673],{},"--logLevel verbose",[800,2675,2676],{},"Removed: it did nothing",[747,2678,2679,898,2682,757,2685,2688,2689,2691,2692,757,2695,757,2698,757,2701,757,2704,757,2707,757,2710,757,2713,757,2716,757,2719,757,2722,888],{},[895,2680,2681],{},"Removed services:",[750,2683,2684],{},"googlefree",[750,2686,2687],{},"yandex"," (use ",[750,2690,1786],{},"), ",[750,2693,2694],{},"ibm",[750,2696,2697],{},"lingvatranslate",[750,2699,2700],{},"modernmt",[750,2702,2703],{},"lilt",[750,2705,2706],{},"unbabel",[750,2708,2709],{},"reverso",[750,2711,2712],{},"baidu",[750,2714,2715],{},"papago",[750,2717,2718],{},"tencent",[750,2720,2721],{},"systran",[750,2723,2724],{},"mymemory",[747,2726,2727,898,2733,757,2736,757,2739,757,2742,757,2745,757,2748,2751,2752,2755,2756,2759],{},[895,2728,2729,2730,2732],{},"Removed ",[750,2731,2263],{}," types:",[750,2734,2735],{},"github",[750,2737,2738],{},"gitlab",[750,2740,2741],{},"crowdin",[750,2743,2744],{},"lokalise",[750,2746,2747],{},"tolgee",[750,2749,2750],{},"weblate",". Use the platform's own CLI, or ",[750,2753,2754],{},"custom",", which needs no ",[750,2757,2758],{},"type"," any more.",[1271,2761,2763],{"id":2762},"changed-behaviour","Changed behaviour",[1031,2765,2766,2782,2805,2814,2827,2841,2853,2866,2875,2881,2894,2899,2919,2929,2932,2935,2941],{},[1034,2767,2768,905,2770,2772,2773,2775,2776,2778,2779,2781],{},[750,2769,1178],{},[750,2771,1192],{}," no longer write ",[750,2774,972],{},". Keys stay absent, and ",[750,2777,804],{}," reports them. ",[750,2780,1178],{}," writes a key only when the code gives its text.",[1034,2783,2784,2786,2787,2790,2791,2794,2795,905,2798,2801,2802,888],{},[750,2785,1178],{}," writes page keys to ",[750,2788,2789],{},"locales\u002Fpages\u002F\u003Croute name>\u002F",", where the module reads them, and scans ",[750,2792,2793],{},"app\u002F"," on Nuxt 4. Move anything from directories such as ",[750,2796,2797],{},"pages\u002F_about",[750,2799,2800],{},"pages\u002Fblog_",", and delete a stray ",[750,2803,2804],{},"locales\u002Fpages\u002F\u003Clocale>.json",[1034,2806,2807,1419,2809,2811,2812,888],{},[750,2808,763],{},[750,2810,767],{}," is respected; before, every command silently used ",[750,2813,756],{},[1034,2815,2200,2816,2818,2819,2822,2823,2826],{},[750,2817,760],{},", the default is ",[750,2820,2821],{},"en",", as in the module, and ",[750,2824,2825],{},"DEFAULT_LOCALE"," is honoured. It used to be the first locale.",[1034,2828,2829,905,2831,2833,2834,905,2837,2840],{},[750,2830,804],{},[750,2832,1192],{}," use the default locale as the reference and check page files. ",[750,2835,2836],{},"\"a.b\"",[750,2838,2839],{},"a: { b }"," count as one key.",[1034,2842,2843,2845,2846,905,2849,2852],{},[750,2844,824],{}," keeps a key used anywhere, in any scope, and stops when usage cannot be proven. ",[750,2847,2848],{},"--include",[750,2850,2851],{},"--exclude"," choose what may be removed.",[1034,2854,2855,2857,2858,2860,2861,2863,2864,888],{},[750,2856,1192],{}," stops the same way, and when the default locale has no keys to compare with. ",[750,2859,1249],{}," overrides it. It also stops when ",[750,2862,2825],{}," chose another reference than ",[750,2865,767],{},[1034,2867,2868,2869,2872,2873,888],{},"Single-dash long flags and stray arguments are errors: ",[750,2870,2871],{},"clean -dryRun"," no longer runs ",[750,2874,824],{},[1034,2876,2877,2878,2880],{},"A read-only file, or a file that is not UTF-8, cannot be saved: the command stops before it changes anything. Reading such a file is fine. A repeated key, a key called ",[750,2879,2143],{}," and an integer above 2^53 stop a command, because a save would lose them.",[1034,2882,2883,2884,2887,2888,1499,2891,888],{},"A flag that needs a value and is followed by another flag is an error; write ",[750,2885,2886],{},"--flag=--value"," for a value that starts with a dash. A boolean flag takes only ",[750,2889,2890],{},"true",[750,2892,2893],{},"false",[1034,2895,2896,2898],{},[750,2897,1589],{}," stops rather than overwrite translations that were never imported.",[1034,2900,2901,2902,757,2904,905,2906,2908,2909,2911,2912,905,2914,2916,2917,888],{},"Exit codes are ",[750,2903,1085],{},[750,2905,1095],{},[750,2907,1105],{},"; failures used to be ",[750,2910,1095],{},", and ",[750,2913,2438],{},[750,2915,2450],{}," always ",[750,2918,1085],{},[1034,2920,2921,2924,2925,2928],{},[750,2922,2923],{},"lint --fix"," no longer leaves ",[750,2926,2927],{},".bak"," files.",[1034,2930,2931],{},"A save keeps a file's indentation, line endings, final newline, symlink and hard link, and leaves files it did not change alone.",[1034,2933,2934],{},"A mistyped or removed flag is now an error, not silently ignored.",[1034,2936,2937,2938,2940],{},"Paths such as ",[750,2939,2203],{}," are relative to the project, not to the shell.",[1034,2942,2943,2945,2946,2949,2950,898,2952,757,2955,1499,2958,2961,2962,2964],{},[750,2944,1674],{}," no longer loads ",[750,2947,2948],{},"@ai-sdk\u002F*"," packages: use ",[750,2951,1694],{},[750,2953,2954],{},"gateway",[750,2956,2957],{},"openai",[750,2959,2960],{},"anthropic",", or ",[750,2963,1700],{}," for an OpenAI-compatible server.",[915,2966,2968],{"id":2967},"related","Related",[2970,2971,2972,2976,2979,2981],"card-group",{},[2973,2974],"card",{"icon":2975,"title":193,"to":194},"i-lucide-braces",[2973,2977],{"icon":2978,"title":30,"to":31},"i-lucide-book-open",[2973,2980],{"icon":2978,"title":125,"to":126},[2973,2982],{"icon":2978,"title":104,"to":105},[2984,2985,2986],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}",{"title":844,"searchDepth":867,"depth":867,"links":2988},[2989,2990,2995,2996,2997,2998,2999,3000,3003],{"id":917,"depth":867,"text":918},{"id":1157,"depth":867,"text":1158,"children":2991},[2992,2993],{"id":1273,"depth":1143,"text":1274},{"id":1443,"depth":1143,"text":2994},"How clean decides",{"id":1564,"depth":867,"text":1565},{"id":1945,"depth":867,"text":1946},{"id":2067,"depth":867,"text":2068},{"id":2146,"depth":867,"text":2147},{"id":2257,"depth":867,"text":2258},{"id":2405,"depth":867,"text":2406,"children":3001},[3002],{"id":2762,"depth":1143,"text":2763},{"id":2967,"depth":867,"text":2968},"Check translations in CI, find unused keys, fill gaps through a translation service and exchange files with translators from the command line.","md","2026-11-04T00:40:16+04:00",null,{"outline":3009},[867,1143],{"order":113,"group":108},{"title":110,"description":3004},"fwdyKoWxC7khbSBIKGXW_LnPK-bEjj6OrhTS1RisKyI",[3014,3016],{"title":104,"path":105,"description":3015},"Edit translation files in the Nuxt DevTools tab and inspect locale state in Vue DevTools during development.",{"title":115,"path":116,"description":3017},"Unit-test components that use $t with @i18n-micro\u002Ftest-utils and Vitest, and check localized pages end to end.",1794131150937]