[{"data":1,"prerenderedAt":718},["ShallowReactive",2],{"navigation_docs":3,"-configuration-locale-refs":357,"-configuration-locale-refs-surround":715},[4,22,40,53,78,107,132,153,167,176,347],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Introduction","\u002Fintroduction","1.introduction",[9,13,17],{"title":10,"path":11,"stem":12},"Why the-i18n-kit","\u002Fintroduction\u002Fwhy","1.introduction\u002F1.why",{"title":14,"path":15,"stem":16},"Architecture","\u002Fintroduction\u002Farchitecture","1.introduction\u002F2.architecture",{"title":18,"path":19,"stem":20},"Built for Agents","\u002Fintroduction\u002Fbuilt-for-agents","1.introduction\u002F3.built-for-agents",false,{"title":23,"icon":24,"path":25,"stem":26,"children":27,"page":21},"ESLint Plugin","i-lucide-shield-check","\u002Feslint-plugin","10.eslint-plugin",[28,32,36],{"title":29,"path":30,"stem":31},"Install and Presets","\u002Feslint-plugin\u002Finstall","10.eslint-plugin\u002F1.install",{"title":33,"path":34,"stem":35},"The Rules","\u002Feslint-plugin\u002Frules","10.eslint-plugin\u002F2.rules",{"title":37,"path":38,"stem":39},"Layer-Aware Missing Keys","\u002Feslint-plugin\u002Flayer-aware","10.eslint-plugin\u002F3.layer-aware",{"title":41,"path":42,"stem":43,"children":44,"page":21},"Getting Started","\u002Fgetting-started","2.getting-started",[45,49],{"title":46,"path":47,"stem":48},"Set Up the MCP Server","\u002Fgetting-started\u002Fagent-setup","2.getting-started\u002F1.agent-setup",{"title":50,"path":51,"stem":52},"From an Unconfigured Repository to a Gated CI Job","\u002Fgetting-started\u002Fcold-start","2.getting-started\u002F2.cold-start",{"title":54,"path":55,"stem":56,"children":57,"page":21},"Monorepos","\u002Fmonorepos","3.monorepos",[58,62,66,70,74],{"title":59,"path":60,"stem":61},"Layers","\u002Fmonorepos\u002Flayers","3.monorepos\u002F1.layers",{"title":63,"path":64,"stem":65},"The Consumer Graph","\u002Fmonorepos\u002Fconsumer-graph","3.monorepos\u002F2.consumer-graph",{"title":67,"path":68,"stem":69},"The Shared Library Scenario","\u002Fmonorepos\u002Fshared-libraries","3.monorepos\u002F3.shared-libraries",{"title":71,"path":72,"stem":73},"Duplicates and Divergence","\u002Fmonorepos\u002Fduplicates-and-divergence","3.monorepos\u002F4.duplicates-and-divergence",{"title":75,"path":76,"stem":77},"Misplaced Usages","\u002Fmonorepos\u002Fmisplaced-usages","3.monorepos\u002F5.misplaced-usages",{"title":79,"path":80,"stem":81,"children":82,"page":21},"Frameworks","\u002Fframeworks","4.frameworks",[83,87,91,95,99,103],{"title":84,"path":85,"stem":86},"Detection","\u002Fframeworks\u002Fdetection","4.frameworks\u002F1.detection",{"title":88,"path":89,"stem":90},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F2.nuxt",{"title":92,"path":93,"stem":94},"Laravel","\u002Fframeworks\u002Flaravel","4.frameworks\u002F3.laravel",{"title":96,"path":97,"stem":98},"Vue","\u002Fframeworks\u002Fvue","4.frameworks\u002F4.vue",{"title":100,"path":101,"stem":102},"React \u002F Next.js","\u002Fframeworks\u002Freact-next","4.frameworks\u002F5.react-next",{"title":104,"path":105,"stem":106},"Generic","\u002Fframeworks\u002Fgeneric","4.frameworks\u002F6.generic",{"title":108,"path":109,"stem":110,"children":111,"page":21},"Configuration","\u002Fconfiguration","5.configuration",[112,116,120,124,128],{"title":113,"path":114,"stem":115},"Where Configuration Lives","\u002Fconfiguration\u002Fwhere-config-lives","5.configuration\u002F1.where-config-lives",{"title":117,"path":118,"stem":119},"Precedence and Conflicts","\u002Fconfiguration\u002Fprecedence","5.configuration\u002F2.precedence",{"title":121,"path":122,"stem":123},"Declared vs. Derived Configuration","\u002Fconfiguration\u002Fdeclared-vs-derived","5.configuration\u002F3.declared-vs-derived",{"title":125,"path":126,"stem":127},"Configuration Fields","\u002Fconfiguration\u002Freference","5.configuration\u002F4.reference",{"title":129,"path":130,"stem":131},"Referring to Locales","\u002Fconfiguration\u002Flocale-refs","5.configuration\u002F5.locale-refs",{"title":133,"path":134,"stem":135,"children":136,"page":21},"Nuxt Module","\u002Fnuxt-module","6.nuxt-module",[137,141,145,149],{"title":138,"path":139,"stem":140},"Install and Setup","\u002Fnuxt-module\u002Finstall","6.nuxt-module\u002F1.install",{"title":142,"path":143,"stem":144},"What It Publishes","\u002Fnuxt-module\u002Fwhat-it-publishes","6.nuxt-module\u002F2.what-it-publishes",{"title":146,"path":147,"stem":148},"What It Validates","\u002Fnuxt-module\u002Fvalidation","6.nuxt-module\u002F3.validation",{"title":150,"path":151,"stem":152},"Options and Limits","\u002Fnuxt-module\u002Foptions-and-limits","6.nuxt-module\u002F4.options-and-limits",{"title":154,"icon":155,"path":156,"stem":157,"children":158,"page":21},"CI\u002FCD","i-lucide-git-pull-request","\u002Fci-cd","7.ci-cd",[159,163],{"title":160,"path":161,"stem":162},"GitHub Actions","\u002Fci-cd\u002Fgithub-actions","7.ci-cd\u002F1.github-actions",{"title":164,"path":165,"stem":166},"GitLab CI","\u002Fci-cd\u002Fgitlab-ci","7.ci-cd\u002F2.gitlab-ci",{"title":168,"path":169,"stem":170,"children":171,"page":21},"Concepts","\u002Fconcepts","8.concepts",[172],{"title":173,"path":174,"stem":175},"Translation Modes","\u002Fconcepts\u002Ftranslation-modes","8.concepts\u002F1.translation-modes",{"title":177,"path":178,"stem":179,"children":180},"Reference","\u002Freference","9.reference",[181,183,261,339,343],{"title":177,"path":178,"stem":182},"9.reference\u002Findex",{"title":184,"path":185,"stem":186,"children":187},"CLI Commands","\u002Freference\u002Fcli","9.reference\u002F1.cli\u002Findex",[188,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257],{"title":184,"path":185,"stem":186},{"title":190,"path":191,"stem":192},"add","\u002Freference\u002Fcli\u002Fadd","9.reference\u002F1.cli\u002Fadd",{"title":194,"path":195,"stem":196},"check","\u002Freference\u002Fcli\u002Fcheck","9.reference\u002F1.cli\u002Fcheck",{"title":198,"path":199,"stem":200},"find-duplicates","\u002Freference\u002Fcli\u002Ffind-duplicates","9.reference\u002F1.cli\u002Ffind-duplicates",{"title":202,"path":203,"stem":204},"get","\u002Freference\u002Fcli\u002Fget","9.reference\u002F1.cli\u002Fget",{"title":206,"path":207,"stem":208},"init","\u002Freference\u002Fcli\u002Finit","9.reference\u002F1.cli\u002Finit",{"title":210,"path":211,"stem":212},"missing","\u002Freference\u002Fcli\u002Fmissing","9.reference\u002F1.cli\u002Fmissing",{"title":214,"path":215,"stem":216},"move","\u002Freference\u002Fcli\u002Fmove","9.reference\u002F1.cli\u002Fmove",{"title":218,"path":219,"stem":220},"remove","\u002Freference\u002Fcli\u002Fremove","9.reference\u002F1.cli\u002Fremove",{"title":222,"path":223,"stem":224},"remove-orphans","\u002Freference\u002Fcli\u002Fremove-orphans","9.reference\u002F1.cli\u002Fremove-orphans",{"title":226,"path":227,"stem":228},"rename","\u002Freference\u002Fcli\u002Frename","9.reference\u002F1.cli\u002Frename",{"title":230,"path":231,"stem":232},"scaffold","\u002Freference\u002Fcli\u002Fscaffold","9.reference\u002F1.cli\u002Fscaffold",{"title":234,"path":235,"stem":236},"scan","\u002Freference\u002Fcli\u002Fscan","9.reference\u002F1.cli\u002Fscan",{"title":238,"path":239,"stem":240},"search","\u002Freference\u002Fcli\u002Fsearch","9.reference\u002F1.cli\u002Fsearch",{"title":242,"path":243,"stem":244},"status","\u002Freference\u002Fcli\u002Fstatus","9.reference\u002F1.cli\u002Fstatus",{"title":246,"path":247,"stem":248},"translate","\u002Freference\u002Fcli\u002Ftranslate","9.reference\u002F1.cli\u002Ftranslate",{"title":250,"path":251,"stem":252},"translate-key","\u002Freference\u002Fcli\u002Ftranslate-key","9.reference\u002F1.cli\u002Ftranslate-key",{"title":254,"path":255,"stem":256},"update","\u002Freference\u002Fcli\u002Fupdate","9.reference\u002F1.cli\u002Fupdate",{"title":258,"path":259,"stem":260},"write","\u002Freference\u002Fcli\u002Fwrite","9.reference\u002F1.cli\u002Fwrite",{"title":262,"path":263,"stem":264,"children":265},"MCP Tools","\u002Freference\u002Fmcp","9.reference\u002F2.mcp\u002Findex",[266,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335],{"title":262,"path":263,"stem":264},{"title":268,"path":269,"stem":270},"discover","\u002Freference\u002Fmcp\u002Fdiscover","9.reference\u002F2.mcp\u002Fdiscover",{"title":272,"path":273,"stem":274},"find_duplicate_keys","\u002Freference\u002Fmcp\u002Ffind_duplicate_keys","9.reference\u002F2.mcp\u002Ffind_duplicate_keys",{"title":276,"path":277,"stem":278},"find_empty_translations","\u002Freference\u002Fmcp\u002Ffind_empty_translations","9.reference\u002F2.mcp\u002Ffind_empty_translations",{"title":280,"path":281,"stem":282},"find_orphan_keys","\u002Freference\u002Fmcp\u002Ffind_orphan_keys","9.reference\u002F2.mcp\u002Ffind_orphan_keys",{"title":284,"path":285,"stem":286},"find_undefined_keys","\u002Freference\u002Fmcp\u002Ffind_undefined_keys","9.reference\u002F2.mcp\u002Ffind_undefined_keys",{"title":288,"path":289,"stem":290},"get_missing_translations","\u002Freference\u002Fmcp\u002Fget_missing_translations","9.reference\u002F2.mcp\u002Fget_missing_translations",{"title":292,"path":293,"stem":294},"get_translation_status","\u002Freference\u002Fmcp\u002Fget_translation_status","9.reference\u002F2.mcp\u002Fget_translation_status",{"title":296,"path":297,"stem":298},"get_translations","\u002Freference\u002Fmcp\u002Fget_translations","9.reference\u002F2.mcp\u002Fget_translations",{"title":300,"path":301,"stem":302},"list_namespaces","\u002Freference\u002Fmcp\u002Flist_namespaces","9.reference\u002F2.mcp\u002Flist_namespaces",{"title":304,"path":305,"stem":306},"move_translation_key","\u002Freference\u002Fmcp\u002Fmove_translation_key","9.reference\u002F2.mcp\u002Fmove_translation_key",{"title":308,"path":309,"stem":310},"remove_orphan_keys","\u002Freference\u002Fmcp\u002Fremove_orphan_keys","9.reference\u002F2.mcp\u002Fremove_orphan_keys",{"title":312,"path":313,"stem":314},"remove_translations","\u002Freference\u002Fmcp\u002Fremove_translations","9.reference\u002F2.mcp\u002Fremove_translations",{"title":316,"path":317,"stem":318},"rename_translation_key","\u002Freference\u002Fmcp\u002Frename_translation_key","9.reference\u002F2.mcp\u002Frename_translation_key",{"title":320,"path":321,"stem":322},"scaffold_locale","\u002Freference\u002Fmcp\u002Fscaffold_locale","9.reference\u002F2.mcp\u002Fscaffold_locale",{"title":324,"path":325,"stem":326},"search_translations","\u002Freference\u002Fmcp\u002Fsearch_translations","9.reference\u002F2.mcp\u002Fsearch_translations",{"title":328,"path":329,"stem":330},"translate_key","\u002Freference\u002Fmcp\u002Ftranslate_key","9.reference\u002F2.mcp\u002Ftranslate_key",{"title":332,"path":333,"stem":334},"translate_missing","\u002Freference\u002Fmcp\u002Ftranslate_missing","9.reference\u002F2.mcp\u002Ftranslate_missing",{"title":336,"path":337,"stem":338},"write_translations","\u002Freference\u002Fmcp\u002Fwrite_translations","9.reference\u002F2.mcp\u002Fwrite_translations",{"title":340,"path":341,"stem":342},"GitHub Action","\u002Freference\u002Faction","9.reference\u002F3.action",{"title":344,"path":345,"stem":346},"Programmatic API","\u002Freference\u002Fprogrammatic-api","9.reference\u002F4.programmatic-api",{"title":348,"icon":349,"path":350,"stem":351,"children":352,"page":21},"Extra Topics","i-lucide-microscope","\u002Fextra-topics","91.extra-topics",[353],{"title":354,"path":355,"stem":356},"How Detection Scores Adapters","\u002Fextra-topics\u002Fdetection-scoring","91.extra-topics\u002F1.detection-scoring",{"id":358,"title":129,"body":359,"description":445,"extension":708,"links":709,"meta":710,"navigation":711,"path":130,"seo":712,"stem":131,"__hash__":714},"docs\u002F5.configuration\u002F5.locale-refs.md",{"type":360,"value":361,"toc":703},"minimark",[362,393,398,401,412,420,432,436,439,639,656,663,666,670,699],[363,364,365,366,370,371,370,374,377,378,380,381,384,385,388,389,392],"p",{},"Anywhere a locale is named — ",[367,368,369],"code",{},"--ref",", ",[367,372,373],{},"--targets",[367,375,376],{},"protectedLocales",", the keys\nof a ",[367,379,336],{}," payload — you may use the locale's ",[382,383,367],"strong",{},", its\n",[382,386,387],{},"language tag",", or its ",[382,390,391],{},"file name"," with the extension. Resolution tries them\nin that order.",[394,395,397],"h2",{"id":396},"prefer-the-code","Prefer the Code",[363,399,400],{},"Codes are unique by construction. Language tags are not.",[363,402,403,404,407,408,411],{},"A project can declare an informal and a formal German that both carry\n",[367,405,406],{},"language: \"de-DE\"",". ",[367,409,410],{},"de-DE"," is then ambiguous: it resolves to the first match,\nand which one that is depends on the order of your framework's locale array —\nsomething you did not choose with this in mind and may reorder without thinking\nabout it.",[363,413,414,415,419],{},"The precedence rule guarantees one thing only: a locale's own code is never\nshadowed by a ",[416,417,418],"em",{},"different"," locale's language tag. Everything else follows from\nwhat your project happens to declare.",[421,422,423,424,427,428,431],"warning",{},"A file name must carry its extension — ",[367,425,426],{},"de-DE-formal.json",", not\n",[367,429,430],{},"de-DE-formal",". The bare stem is not a valid reference and resolves to nothing.",[394,433,435],{"id":434},"a-reference-that-matches-nothing-is-reported","A Reference That Matches Nothing Is Reported",[363,437,438],{},"It is not silently dropped:",[440,441,446],"pre",{"className":442,"code":443,"language":444,"meta":445,"style":445},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"written\": [\"common.save\"],\n  \"filesWritten\": 2,\n  \"unresolvedLocales\": [\n    {\n      \"ref\": \"de-DE-formal\",\n      \"keys\": [\"common.save\"],\n      \"suggestion\": \"Did you mean \\\"de-formal\\\" or \\\"de-DE\\\" or \\\"de-DE-formal.json\\\"?\"\n    }\n  ]\n}\n","json","",[367,447,448,457,487,506,521,527,550,572,621,627,633],{"__ignoreMap":445},[449,450,453],"span",{"class":451,"line":452},"line",1,[449,454,456],{"class":455},"sMK4o","{\n",[449,458,460,463,467,470,473,476,478,482,484],{"class":451,"line":459},2,[449,461,462],{"class":455},"  \"",[449,464,466],{"class":465},"spNyl","written",[449,468,469],{"class":455},"\"",[449,471,472],{"class":455},":",[449,474,475],{"class":455}," [",[449,477,469],{"class":455},[449,479,481],{"class":480},"sfazB","common.save",[449,483,469],{"class":455},[449,485,486],{"class":455},"],\n",[449,488,490,492,495,497,499,503],{"class":451,"line":489},3,[449,491,462],{"class":455},[449,493,494],{"class":465},"filesWritten",[449,496,469],{"class":455},[449,498,472],{"class":455},[449,500,502],{"class":501},"sbssI"," 2",[449,504,505],{"class":455},",\n",[449,507,509,511,514,516,518],{"class":451,"line":508},4,[449,510,462],{"class":455},[449,512,513],{"class":465},"unresolvedLocales",[449,515,469],{"class":455},[449,517,472],{"class":455},[449,519,520],{"class":455}," [\n",[449,522,524],{"class":451,"line":523},5,[449,525,526],{"class":455},"    {\n",[449,528,530,533,537,539,541,544,546,548],{"class":451,"line":529},6,[449,531,532],{"class":455},"      \"",[449,534,536],{"class":535},"sBMFI","ref",[449,538,469],{"class":455},[449,540,472],{"class":455},[449,542,543],{"class":455}," \"",[449,545,430],{"class":480},[449,547,469],{"class":455},[449,549,505],{"class":455},[449,551,553,555,558,560,562,564,566,568,570],{"class":451,"line":552},7,[449,554,532],{"class":455},[449,556,557],{"class":535},"keys",[449,559,469],{"class":455},[449,561,472],{"class":455},[449,563,475],{"class":455},[449,565,469],{"class":455},[449,567,481],{"class":480},[449,569,469],{"class":455},[449,571,486],{"class":455},[449,573,575,577,580,582,584,586,589,593,596,598,601,603,605,607,609,611,613,615,618],{"class":451,"line":574},8,[449,576,532],{"class":455},[449,578,579],{"class":535},"suggestion",[449,581,469],{"class":455},[449,583,472],{"class":455},[449,585,543],{"class":455},[449,587,588],{"class":480},"Did you mean ",[449,590,592],{"class":591},"sTEyZ","\\\"",[449,594,595],{"class":480},"de-formal",[449,597,592],{"class":591},[449,599,600],{"class":480}," or ",[449,602,592],{"class":591},[449,604,410],{"class":480},[449,606,592],{"class":591},[449,608,600],{"class":480},[449,610,592],{"class":591},[449,612,426],{"class":480},[449,614,592],{"class":591},[449,616,617],{"class":480},"?",[449,619,620],{"class":455},"\"\n",[449,622,624],{"class":451,"line":623},9,[449,625,626],{"class":455},"    }\n",[449,628,630],{"class":451,"line":629},10,[449,631,632],{"class":455},"  ]\n",[449,634,636],{"class":451,"line":635},11,[449,637,638],{"class":455},"}\n",[363,640,641,646,647,649,650,652,653,655],{},[382,642,643,645],{},[367,644,513],{}," is the only reliable signal that a write did less than you\nasked."," The key still appears in ",[367,648,466],{},", because the other locales did\nsucceed, and ",[367,651,494],{}," is simply short by one. A caller checking only\n",[367,654,466],{}," sees success.",[363,657,658,659,662],{},"A reference matching several locales is reported the same way under\n",[367,660,661],{},"ambiguousLocales",", naming every candidate and the one that was used.",[363,664,665],{},"Both fields are absent when every reference resolves uniquely, so a clean write\nis byte-for-byte what it always was — adding the reporting did not change the\nshape of a result that has nothing to report.",[394,667,669],{"id":668},"where-this-bites","Where This Bites",[671,672,673,688],"ul",{},[674,675,676,679,680,682,683,687],"li",{},[382,677,678],{},"Protected locales."," A ",[367,681,376],{}," entry that resolves to nothing\nprotects nothing, and the run that machine-translates the locale you meant to\nprotect looks exactly like a successful one. See\n",[684,685,686],"a",{"href":126},"the configuration reference",".",[674,689,690,693,694,696,697,687],{},[382,691,692],{},"Agent writes."," An agent constructing locale keys from a language tag it\ninferred rather than a code it read from ",[367,695,268],{}," is the common way to reach\n",[367,698,661],{},[700,701,702],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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);}",{"title":445,"searchDepth":489,"depth":489,"links":704},[705,706,707],{"id":396,"depth":459,"text":397},{"id":434,"depth":459,"text":435},{"id":668,"depth":459,"text":669},"md",null,{},true,{"description":713,"title":129},"A locale can be named by its code, its language tag or its file name — why the code is the one to use, and how an unresolved reference is reported rather than dropped.","AuvzXSY3MaLpfEi-GG2ifemrC4SreUgaCaNt0GwqUnY",[716,717],{"title":125,"path":126,"stem":127,"description":445,"children":-1},{"title":138,"path":139,"stem":140,"description":445,"children":-1},1787604651644]