[{"data":1,"prerenderedAt":783},["ShallowReactive",2],{"navigation_docs":3,"-reference-action":357,"-reference-action-surround":780},[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":340,"body":359,"description":767,"extension":773,"links":774,"meta":775,"navigation":776,"path":341,"seo":777,"stem":342,"__hash__":779},"docs\u002F9.reference\u002F3.action.md",{"type":360,"value":361,"toc":766},"minimark",[362,366,386,393,398,699,703,756],[363,364,365],"p",{},"Find missing translation keys and translate them via LLM. Provider-agnostic: supports OpenAI, Anthropic, and Google.",[363,367,368,369,373,374,380,381,385],{},"The action installs ",[370,371,372],"code",{},"@the-i18n-kit\u002Fcli"," and the SDK matching the chosen provider, runs the ",[375,376,377,379],"a",{"href":247},[370,378,246],{}," command",", and opens a pull request with what it wrote. The command owns the pass\u002Ffail decision and reports it as an ",[375,382,384],{"href":383},"\u002Freference\u002Fcli#exit-codes","exit code","; the action reads counts for its outputs and the log only.",[363,387,388,389,392],{},"Inputs and outputs below are generated from ",[370,390,391],{},"action.yml",", so a workflow that sets an input listed here is a workflow GitHub accepts.",[394,395,397],"h2",{"id":396},"inputs","Inputs",[399,400,401,420],"table",{},[402,403,404],"thead",{},[405,406,407,411,414,417],"tr",{},[408,409,410],"th",{},"Input",[408,412,413],{},"Required",[408,415,416],{},"Default",[408,418,419],{},"Description",[421,422,423,440,454,468,482,497,511,525,542,559,575,592,609,623,637,651,668,682],"tbody",{},[405,424,425,431,434,437],{},[426,427,428],"td",{},[370,429,430],{},"provider",[426,432,433],{},"yes",[426,435,436],{},"—",[426,438,439],{},"LLM provider: openai, anthropic, or google",[405,441,442,447,449,451],{},[426,443,444],{},[370,445,446],{},"model",[426,448,433],{},[426,450,436],{},[426,452,453],{},"Model name (e.g. gpt-4o, claude-3-5-sonnet-20241022, gemini-2.0-flash)",[405,455,456,461,463,465],{},[426,457,458],{},[370,459,460],{},"api_key",[426,462,433],{},[426,464,436],{},[426,466,467],{},"API key for the chosen provider",[405,469,470,475,477,479],{},[426,471,472],{},[370,473,474],{},"layer",[426,476,433],{},[426,478,436],{},[426,480,481],{},"Layer name to translate (e.g. common, dashboard)",[405,483,484,489,492,494],{},[426,485,486],{},[370,487,488],{},"locales",[426,490,491],{},"no",[426,493,436],{},[426,495,496],{},"Comma-separated target locales (default: all except source)",[405,498,499,504,506,508],{},[426,500,501],{},[370,502,503],{},"source_locale",[426,505,491],{},[426,507,436],{},[426,509,510],{},"Reference\u002Fsource locale (default: project default from .i18n-mcp.json)",[405,512,513,518,520,522],{},[426,514,515],{},[370,516,517],{},"keys",[426,519,491],{},[426,521,436],{},[426,523,524],{},"Comma-separated keys to translate (default: all missing)",[405,526,527,532,534,539],{},[426,528,529],{},[370,530,531],{},"batch_size",[426,533,491],{},[426,535,536],{},[370,537,538],{},"50",[426,540,541],{},"Keys per LLM call (default: 50)",[405,543,544,549,551,556],{},[426,545,546],{},[370,547,548],{},"dry_run",[426,550,491],{},[426,552,553],{},[370,554,555],{},"false",[426,557,558],{},"Preview translations without writing files",[405,560,561,566,568,572],{},[426,562,563],{},[370,564,565],{},"fail_on_failed",[426,567,491],{},[426,569,570],{},[370,571,555],{},[426,573,574],{},"Fail the step (exit 2) when any key failed to translate. Off by default: a partly failed run still writes what succeeded, and the failed keys stay missing for the next run to retry.",[405,576,577,582,584,589],{},[426,578,579],{},[370,580,581],{},"working_directory",[426,583,491],{},[426,585,586],{},[370,587,588],{},"${{ github.workspace }}",[426,590,591],{},"Project root directory (default: github.workspace)",[405,593,594,599,601,606],{},[426,595,596],{},[370,597,598],{},"create_pr",[426,600,491],{},[426,602,603],{},[370,604,605],{},"true",[426,607,608],{},"Create a PR with the translated files",[405,610,611,616,618,620],{},[426,612,613],{},[370,614,615],{},"pr_branch",[426,617,491],{},[426,619,436],{},[426,621,622],{},"Branch name for the PR (default: i18n\u002Ftranslate-missing-\u003Ctimestamp>)",[405,624,625,630,632,634],{},[426,626,627],{},[370,628,629],{},"commit_message",[426,631,491],{},[426,633,436],{},[426,635,636],{},"Commit message (default: \"chore(i18n): translate missing keys via \u003Cprovider>\")",[405,638,639,644,646,648],{},[426,640,641],{},[370,642,643],{},"pr_title",[426,645,491],{},[426,647,436],{},[426,649,650],{},"PR title (default: \"chore(i18n): translate missing keys\")",[405,652,653,658,660,665],{},[426,654,655],{},[370,656,657],{},"github_token",[426,659,491],{},[426,661,662],{},[370,663,664],{},"${{ github.token }}",[426,666,667],{},"GitHub token for creating PRs. Defaults to GITHUB_TOKEN.",[405,669,670,675,677,679],{},[426,671,672],{},[370,673,674],{},"base_branch",[426,676,491],{},[426,678,436],{},[426,680,681],{},"Base branch for the PR (default: the branch that triggered the workflow)",[405,683,684,689,691,696],{},[426,685,686],{},[370,687,688],{},"cli_version",[426,690,491],{},[426,692,693],{},[370,694,695],{},"latest",[426,697,698],{},"the-i18n-cli version to install (npm dist-tag or version). Use \"skip\" if the CLI is already installed (e.g. a local build).",[394,700,702],{"id":701},"outputs","Outputs",[399,704,705,714],{},[402,706,707],{},[405,708,709,712],{},[408,710,711],{},"Output",[408,713,419],{},[421,715,716,726,736,746],{},[405,717,718,723],{},[426,719,720],{},[370,721,722],{},"gate_tripped",[426,724,725],{},"Names of any CI gates that tripped. The job fails after the translations are committed.",[405,727,728,733],{},[426,729,730],{},[370,731,732],{},"translated_count",[426,734,735],{},"Number of keys translated",[405,737,738,743],{},[426,739,740],{},[370,741,742],{},"failed_count",[426,744,745],{},"Number of keys that failed to translate",[405,747,748,753],{},[426,749,750],{},[370,751,752],{},"pr_url",[426,754,755],{},"URL of the created PR (only when create_pr is true)",[757,758,759,760,762,763,765],"note",{},"A tripped gate does not skip the pull request step. The step that runs ",[370,761,246],{}," records the gate in ",[370,764,722],{}," and lets the commit happen, and a later step fails the job — so a run that found something still keeps the translations it produced.",{"title":767,"searchDepth":768,"depth":768,"links":769},"",3,[770,772],{"id":396,"depth":771,"text":397},2,{"id":701,"depth":771,"text":702},"md",null,{},true,{"description":778,"title":340},"Every input and output of the composite action, generated from the action manifest.","OOphufIIouXSjCiS6myoAfcagB8nUs-c36VJ_CUwrc4",[781,782],{"title":336,"path":337,"stem":338,"description":767,"children":-1},{"title":344,"path":345,"stem":346,"description":767,"children":-1},1787604656983]