[{"data":1,"prerenderedAt":1001},["ShallowReactive",2],{"navigation_docs":3,"-concepts-translation-modes":357,"-concepts-translation-modes-surround":998},[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":173,"body":359,"description":378,"extension":991,"links":992,"meta":993,"navigation":994,"path":174,"seo":995,"stem":175,"__hash__":997},"docs\u002F8.concepts\u002F1.translation-modes.md",{"type":360,"value":361,"toc":978},"minimark",[362,372,414,430,435,438,472,499,512,517,520,564,567,622,628,647,651,654,667,681,696,700,703,756,759,767,770,774,777,854,858,902,905,909,912,939,945,949,964,974],[363,364,365,368,369,371],"p",{},[366,367,246],"code",{}," and ",[366,370,250],{},", and their MCP counterparts, run in one of two\nmodes. Every result names the one that ran, so a caller never has to infer it:",[373,374,379],"pre",{"className":375,"code":376,"language":377,"meta":378,"style":378},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ \"mode\": \"provider\" }\n","json","",[366,380,381],{"__ignoreMap":378},[382,383,386,390,393,397,400,403,405,409,411],"span",{"class":384,"line":385},"line",1,[382,387,389],{"class":388},"sMK4o","{",[382,391,392],{"class":388}," \"",[382,394,396],{"class":395},"spNyl","mode",[382,398,399],{"class":388},"\"",[382,401,402],{"class":388},":",[382,404,392],{"class":388},[382,406,408],{"class":407},"sfazB","provider",[382,410,399],{"class":388},[382,412,413],{"class":388}," }\n",[363,415,416,418,419,421,422,425,426,429],{},[366,417,396],{}," is ",[366,420,408],{},", ",[366,423,424],{},"agent",", or ",[366,427,428],{},"dry-run",".",[431,432,434],"h2",{"id":433},"provider-mode","Provider Mode",[363,436,437],{},"A provider is configured, so the kit calls it and writes the results itself.",[373,439,443],{"className":440,"code":441,"language":442,"meta":378,"style":378},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","the-i18n-cli translate --layer root --provider google --model gemini-2.5-flash\n","bash",[366,444,445],{"__ignoreMap":378},[382,446,447,451,454,457,460,463,466,469],{"class":384,"line":385},[382,448,450],{"class":449},"sBMFI","the-i18n-cli",[382,452,453],{"class":407}," translate",[382,455,456],{"class":407}," --layer",[382,458,459],{"class":407}," root",[382,461,462],{"class":407}," --provider",[382,464,465],{"class":407}," google",[382,467,468],{"class":407}," --model",[382,470,471],{"class":407}," gemini-2.5-flash\n",[363,473,474,475,421,478,368,481,484,485,488,489,492,493,421,496,429],{},"Three providers ship: ",[366,476,477],{},"openai",[366,479,480],{},"anthropic",[366,482,483],{},"google",". The key comes from\n",[366,486,487],{},"--apiKey"," or the provider's environment variable — ",[366,490,491],{},"OPENAI_API_KEY",",\n",[366,494,495],{},"ANTHROPIC_API_KEY",[366,497,498],{},"GEMINI_API_KEY",[363,500,501,502,368,505,508,509,511],{},"For the MCP server, configure it on the server process instead, with\n",[366,503,504],{},"I18N_PROVIDER",[366,506,507],{},"I18N_MODEL",". Partial configuration — a provider with no\nmodel, or no key — logs a warning and falls back to agent mode, so a\nmisconfigured server degrades at startup rather than surprising a caller\nmid-request. ",[366,510,268],{}," reports the active mode without translating anything.",[513,514,516],"h3",{"id":515},"custom-endpoints","Custom Endpoints",[363,518,519],{},"Anything that speaks the same protocol works: a gateway, a self-hosted model\nserver, a corporate proxy.",[373,521,523],{"className":440,"code":522,"language":442,"meta":378,"style":378},"the-i18n-cli translate --layer root --provider openai --model llama3 \\\n  --baseUrl http:\u002F\u002Flocalhost:11434\u002Fv1 --apiKey unused\n",[366,524,525,549],{"__ignoreMap":378},[382,526,527,529,531,533,535,537,540,542,545],{"class":384,"line":385},[382,528,450],{"class":449},[382,530,453],{"class":407},[382,532,456],{"class":407},[382,534,459],{"class":407},[382,536,462],{"class":407},[382,538,539],{"class":407}," openai",[382,541,468],{"class":407},[382,543,544],{"class":407}," llama3",[382,546,548],{"class":547},"sTEyZ"," \\\n",[382,550,552,555,558,561],{"class":384,"line":551},2,[382,553,554],{"class":407},"  --baseUrl",[382,556,557],{"class":407}," http:\u002F\u002Flocalhost:11434\u002Fv1",[382,559,560],{"class":407}," --apiKey",[382,562,563],{"class":407}," unused\n",[363,565,566],{},"Three sources, highest precedence first:",[568,569,570,583],"table",{},[571,572,573],"thead",{},[574,575,576,580],"tr",{},[577,578,579],"th",{},"Source",[577,581,582],{},"Scope",[584,585,586,597,607],"tbody",{},[574,587,588,594],{},[589,590,591],"td",{},[366,592,593],{},"--baseUrl",[589,595,596],{},"One invocation",[574,598,599,604],{},[589,600,601],{},[366,602,603],{},"I18N_BASE_URL",[589,605,606],{},"The environment, including an MCP server process",[574,608,609,619],{},[589,610,611,614,615],{},[366,612,613],{},"providerBaseUrl"," in your ",[616,617,618],"a",{"href":114},"kit config",[589,620,621],{},"The whole project, shared through the repository",[363,623,624,625,627],{},"A blank flag or environment variable counts as unset, so an exported-but-empty\nvariable cannot silently disable an endpoint configured further down the chain.\nA blank ",[366,626,613],{}," in a config file is rejected at load time instead —\nunlike a shell variable, it cannot get there by accident.",[629,630,631,634,642],"warning",{},[363,632,633],{},"An API key is still required even when the endpoint ignores it. Pass any\nplaceholder for a local server.",[363,635,636,637,641],{},"This overrides ",[638,639,640],"strong",{},"the endpoint only",". A provider that also changes the request\nshape or the auth header — Azure OpenAI among them — needs its own client and is\nnot reachable this way.",[363,643,644,646],{},[366,645,483],{}," has no endpoint override at all. Passing a base URL with it is rejected\nas a configuration error rather than ignored, so a misconfiguration cannot look\nlike it worked.",[431,648,650],{"id":649},"agent-mode","Agent Mode",[363,652,653],{},"No provider is configured. This is the default in an MCP host, and the two\nsurfaces do different things with it — deliberately.",[363,655,656,659,660,663,664,666],{},[638,657,658],{},"In the MCP server",", the translate tools return per-locale ",[366,661,662],{},"fallbackContexts",":\nthe source values plus your glossary, style notes and locale notes. The calling\nagent translates them with the model it is already running on and persists the\nresult through ",[366,665,336],{},". Nothing is lost; the work moves.",[363,668,669,672,673,676,677,680],{},[638,670,671],{},"In the CLI",", nothing is translated. There is no model on the other end of a\nterminal, so every key is reported as ",[366,674,675],{},"skipped"," with reason ",[366,678,679],{},"no-provider"," and the\nresult explains how to enable provider mode.",[629,682,683,684,687,688,691,692,695],{},"A CLI translate run with no provider ",[638,685,686],{},"succeeds",". It exits 0 having translated\nnothing, because skipping is not failing. A CI job that forgets ",[366,689,690],{},"--provider","\ntherefore goes green while doing no work — add ",[366,693,694],{},"--failOnFailed",", or check the\ncounts, if that should block.",[431,697,699],{"id":698},"the-result-contract","The Result Contract",[363,701,702],{},"Every missing key is accounted for by exactly one bucket:",[568,704,705,715],{},[571,706,707],{},[574,708,709,712],{},[577,710,711],{},"Bucket",[577,713,714],{},"Means",[584,716,717,727,737,747],{},[574,718,719,724],{},[589,720,721],{},[366,722,723],{},"translated",[589,725,726],{},"Written",[574,728,729,734],{},[589,730,731],{},[366,732,733],{},"wouldTranslate",[589,735,736],{},"Dry runs only: what would be written",[574,738,739,744],{},[589,740,741],{},[366,742,743],{},"failed",[589,745,746],{},"Attempted and rejected, with a reason",[574,748,749,753],{},[589,750,751],{},[366,752,675],{},[589,754,755],{},"Not attempted, with a reason",[363,757,758],{},"The invariant, per locale:",[373,760,765],{"className":761,"code":763,"language":764},[762],"language-text","missing = translated + wouldTranslate + failed + skipped\n","text",[366,766,763],{"__ignoreMap":378},[363,768,769],{},"A run that quietly loses keys cannot balance, so a caller verifies completeness\nby arithmetic rather than by re-scanning the project.",[513,771,773],{"id":772},"why-something-failed","Why Something Failed",[363,775,776],{},"A closed set, so an agent branches on the value instead of pattern-matching\nEnglish:",[568,778,779,789],{},[571,780,781],{},[574,782,783,786],{},[577,784,785],{},"Reason",[577,787,788],{},"What happened",[584,790,791,801,811,824,834,844],{},[574,792,793,798],{},[589,794,795],{},[366,796,797],{},"provider-error",[589,799,800],{},"The provider call failed",[574,802,803,808],{},[589,804,805],{},[366,806,807],{},"omitted-by-model",[589,809,810],{},"The model returned a response that did not include this key",[574,812,813,818],{},[589,814,815],{},[366,816,817],{},"truncated",[589,819,820,821],{},"The response hit the token limit — lower ",[366,822,823],{},"batchSize",[574,825,826,831],{},[589,827,828],{},[366,829,830],{},"placeholder-mismatch",[589,832,833],{},"The translation's placeholders do not match the source",[574,835,836,841],{},[589,837,838],{},[366,839,840],{},"plural-mismatch",[589,842,843],{},"The translation has a different number of plural variants",[574,845,846,851],{},[589,847,848],{},[366,849,850],{},"write-error",[589,852,853],{},"Translated, but the locale file could not be written",[513,855,857],{"id":856},"why-something-was-skipped","Why Something Was Skipped",[568,859,860,868],{},[571,861,862],{},[574,863,864,866],{},[577,865,785],{},[577,867,788],{},[584,869,870,879,889],{},[574,871,872,876],{},[589,873,874],{},[366,875,679],{},[589,877,878],{},"Agent mode in the CLI — nothing was attempted",[574,880,881,886],{},[589,882,883],{},[366,884,885],{},"already-translated",[589,887,888],{},"The target already had a value",[574,890,891,896],{},[589,892,893],{},[366,894,895],{},"protected-locale",[589,897,898,899],{},"Excluded by ",[366,900,901],{},"protectedLocales",[363,903,904],{},"Provider failures are triaged before they cost a whole run: an authentication\nerror aborts immediately with one clear message rather than failing key by key,\na rate limit is retried with backoff, and a response cut off at the token limit\nis detected from the provider's finish reason rather than surfacing as malformed\noutput.",[431,906,908],{"id":907},"nothing-is-written-unchecked","Nothing Is Written Unchecked",[363,910,911],{},"Two things are checked per value before it reaches a locale file:",[913,914,915,933],"ul",{},[916,917,918,921,922,421,925,928,929,932],"li",{},[638,919,920],{},"Placeholder parity, per plural variant"," — ",[366,923,924],{},"{placeholders}",[366,926,927],{},"@:linked.refs",",\nand ",[366,930,931],{},":params"," for PHP. Checked per variant rather than per string, so a\nplaceholder that survives in the singular and vanishes in the plural is still\ncaught.",[916,934,935,938],{},[638,936,937],{},"Plural variant count"," — the number of pipe-separated variants must match the\nsource.",[363,940,941,942,944],{},"A value failing either is rejected into ",[366,943,743],{}," rather than written. The key\nstays missing, which is recoverable; a locale file with a broken interpolation is\nnot.",[431,946,948],{"id":947},"protected-locales","Protected Locales",[363,950,951,952,954,955,676,957,959,960,963],{},"Locales listed in ",[366,953,901],{}," are excluded from the default target set and\nreported as ",[366,956,675],{},[366,958,895],{},". Naming one explicitly in\n",[366,961,962],{},"--targets"," overrides the protection, with a warning.",[965,966,967,968,970,971,429],"note",{},"A ",[366,969,901],{}," entry that resolves to nothing protects nothing, and the run\nthat machine-translates the locale you meant to protect looks exactly like a\nsuccessful one. See ",[616,972,973],{"href":130},"referring to locales",[975,976,977],"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 .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 .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}",{"title":378,"searchDepth":979,"depth":979,"links":980},3,[981,984,985,989,990],{"id":433,"depth":551,"text":434,"children":982},[983],{"id":515,"depth":979,"text":516},{"id":649,"depth":551,"text":650},{"id":698,"depth":551,"text":699,"children":986},[987,988],{"id":772,"depth":979,"text":773},{"id":856,"depth":979,"text":857},{"id":907,"depth":551,"text":908},{"id":947,"depth":551,"text":948},"md",null,{},true,{"description":996,"title":173},"What happens when a translate operation runs — with a provider and without one, what the result accounts for, and what is checked before a value reaches a locale file.","dyuJKP8gIRKqpmyyxqaTWbo8MXOVwWK4iAqwdGe8_ws",[999,1000],{"title":164,"path":165,"stem":166,"description":378,"children":-1},{"title":177,"path":178,"stem":182,"description":378,"children":-1},1787604652521]