Pod

Yes, this is on purpose. Pod is built for agents, so the default page is plain HTML.
Human? View the normal website.
Agent? You probably prefer /mcp/nuxt-i18n-mcp/issues.md or /mcp/nuxt-i18n-mcp/issues.json, or Pod over MCP.

Reported issues for nuxt-i18n-mcp

Pod holds 23 of 143 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to nuxt-i18n-mcp.

Most discussed

Idea: layer-aware ESLint integration for monorepos (evaluate upstreaming to @intlify first)

Idea / not scheduled. Captured from the anny-ui lint evaluation (2026-08-11, MR anny-ui!2025).

Problem

@intlify/eslint-plugin-vue-i18n models one flat message catalog per locale. In layered monorepos (Nuxt layers, multi-app setups) that model breaks:

Read the thread · 2026-08-11 · closed · 4 comments

Spec: AST-only scanning — flip the JS/TS/Vue default, add the PHP/Blade frontend, evacuate PHP from the core

Completes the migration #332 specifies. Phase gates were measured on real corpora before this was written; the numbers are in Further Notes.

Problem Statement

The scanner that decides which translation keys are alive — and therefore which ones remove-orphans may delete — has two answers to that question. The AST frontend answers by resolving what a name is bound to; the regex path answers by pattern-matching text, with heuristics whose failure modes are deleting a used key (#298) or prote

Read the thread · 2026-08-22 · open · 3 comments

Spec: adopt MCP 2026-07-28 once the TypeScript SDK ships it

Activation trigger: a @modelcontextprotocol/sdk release with LATEST_PROTOCOL_VERSION = '2026-07-28' (check: npm view @modelcontextprotocol/sdk version + the types.js constant). Until then this spec is blocked — do not start. Re-check in a few weeks; the revision is currently a draft.

Problem Statement

MCP 2026-07-28 (changelog, [Claude announcement](https://claude.com/blog/bringing-mcp-2026-07-28-to-claude

Read the thread · 2026-08-09 · closed · 3 comments

Layer logic: unify duplicated claim/ownership glue (has a silent-drop bug), add layer graph + find_duplicate_keys

From the 2026-08-09 layer-logic analysis, triggered by a real anny-ui finding: 14 keys duplicated between root and app-shop's layer (pages.account.settings.businessAccount.*), 8 with divergent German source text — an incomplete root→app migration that no current kit tool can detect.

Findings

  1. The alias/ownership claim logic is implemented twice and has silently diverged (adapters/nuxt/index.ts ~147-176 in loadAndMergeApps vs ~349-381 in discoverLocaleDirs): different takeo

Read the thread · 2026-08-09 · closed · 3 comments

Spec: replace MCP sampling with direct provider calls + agent fallback

MCP sampling is deprecated as of protocol 2026-07-28 (SEP-2577). This spec removes it entirely and replaces it with two first-class translation modes. Synthesized from the 2026-08-08 assessment and a field report from an agent using the MCP in Claude Code.

Problem Statement

The kit's headline feature — auto-translating missing keys — depends on MCP sampling, which is deprecated and was never supported by major hosts anyway (Claude Code among them). In such hosts, translate_missing reports

Read the thread · 2026-08-08 · closed · 3 comments

Generate the configuration reference from the shared schema

Parent

#300

What to build

The full configuration reference, generated from the shared zod schema.

Since #328 there are two hand-written config formats — the typed i18n-kit.config.ts and the older JSON file — plus policy declarable in nuxt.config.ts. The reference documents every field once and states which files it can be declared in.

Acceptance criteria

Read the thread · 2026-08-16 · closed · 2 comments

ci: reference pipelines gate on exit codes instead of jq arithmetic

Parent

#246

What to build

Move the shipped reference pipelines off jq arithmetic and onto exit codes.

Both the GitHub Action and the two GitLab job templates currently decide success by reading JSON fields out of command output. That coupling to undocumented output shapes is the root cause of the anny-ui pipeline breakage — the templates read .summary.totalOrphans when the field is .summary.orphanCount, and treated orphanKeys as an array when it is an object keyed by layer. Thos

Read the thread · 2026-08-10 · closed · 2 comments

mcp: expose findEmptyTranslations as a tool (the CLI commands are restored)

Parent

#246

What to build

Make the whole command surface reachable and discoverable.

Correction to the parent spec, found while ticketing: detect, list-dirs, empty and scan are not merely hidden from --help. The CLI entry point filters them out of the subcommand map before it is handed to citty, so they are absent from the executed command map too — the-i18n-cli scan fails today. This is a restore, not an unhide. (#195 makes the same observation.)

Then close the MCP gap: `di

Read the thread · 2026-08-10 · closed · 2 comments

Most recent

Spec: @the-i18n-kit/eslint-plugin — contract rules and layer-aware scope rules, one plugin

Single spec for the ESLint plugin and all its rules. Folds in and supersedes #289 (layer-aware validation; the upstream-intlify evaluation is closed out below) and #421 (authoring rules). #420 motivates one rule. Measurement context: the anny-ui lint evaluation (2,620 false duplicate warnings from flat-catalog tooling) and the 2026-08-24 wire-driven-keys audit.

Problem Statement

Two classes of i18n mistakes surface only after they are expensive:

  1. **Authoring idioms that defeat the scanne

Read the thread · 2026-08-24 · closed · 1 comment

@the-i18n-kit/eslint-plugin: authoring rules that keep the scanner sound

Parent

#289 tracks the catalog-validation side of ESLint integration (layer-aware no-missing-keys etc., upstream-intlify evaluation first) — that stays open and unchanged. This ticket is the other half: authoring-idiom rules that keep the scanner sound, which no upstream can provide because they enforce this kit's contract. #420 motivates the second rule.

Note: #289 described a repo-local no-variable-prefix-i18n-keys rule in anny-ui. The audit found it was never actually implemented —

Read the thread · 2026-08-24 · closed · 1 comment

Evacuate PHP from the core: reader and patterns behind the optional-peer seam

Parent

#399 (Spec: AST-only scanning) — Phase 3.

What to build

A JavaScript-project install carries no PHP, in code or dependencies. The PHP locale-file reader moves from hard dependency to optional peer behind the same project-root dynamic-import seam the parser uses, joining the single "Laravel projects install these" story. The Laravel pattern set and the PHP bare-candidate shape move into the PHP frontend directory. The missing-dependency error for a php-array project names exactl

Read the thread · 2026-08-22 · closed · 1 comment

Flip the PHP default — the bookings-api gate, and the contract trial

Parent

#399 (Spec: AST-only scanning) — Phase 2 gate.

What to build

The PHP frontend becomes the default for php-array projects, gated the same way the JS flip was: evidence over a real corpus, not the technique's appeal. Extend the differential harness to run the Laravel pattern set, run it over the bookings-api corpus (~4,240 PHP files, 45 Blade templates, 30+ locales including a formal/informal pair sharing a language tag), and diff the operations — check, status, missing, dry-run

Read the thread · 2026-08-22 · closed · 0 comments

Blade lifting: directives and echoes parsed as the PHP they wrap

Parent

#399 (Spec: AST-only scanning) — Phase 2.

What to build

Blade templates understood as the PHP expressions they wrap: @lang(…), @choice(…) and {{ __(…) }} lifted lexically out of the template and handed to the PHP parser, flowing through the same rules as every other call site. The lifting regex frames text only — it never decides what a key is. A Blade construct the lifter does not recognise degrades to the pattern fallback for that file, never to silence.

Acceptance cr

Read the thread · 2026-08-22 · closed · 0 comments

PHP frontend: helpers, interpolation and concat as syntax, php-parser as optional peer

Parent

#399 (Spec: AST-only scanning) — Phase 2.

What to build

A PHP language frontend, opt-in and parallel to the JS flip: Laravel translation helpers (__, trans, trans_choice, Lang::get) recognised as syntax, double-quoted "prefix.{$var}" interpolation reported as a template argument, .-concatenation as a concat argument — the same call-site shapes every frontend emits, interpreted by the same rules. PHP-specific pressure on the contract (choice-call count arguments, Larav

Read the thread · 2026-08-22 · closed · 0 comments

Flip the JS/TS/Vue default to AST, delete the superseded heuristics — anny-ui gate

Parent

#399 (Spec: AST-only scanning) — Phase 1.

What to build

The AST frontend becomes the default scanner for JS/TS/Vue, with the pattern frontend running only for files the parser declines. In the same change, the heuristics the AST supersedes are deleted — the callee dot requirement, the textual const table and its substitution, static promotion of slotless dynamic matches — together with the test expectations that encoded their artifacts (the concat-prefix pseudo-key). Two mechanis

Read the thread · 2026-08-22 · closed · 0 comments

Write the translation modes concept page

Split out of #358.

Why separately

#358 bundled orphan detection and translation modes into one ticket, and they do not share a blocker:

So translation modes was held back by the grouping rather than by an

Read the thread · 2026-08-22 · closed · 0 comments

docs + schema: the config surface still describes nuxt.config.ts policy that #372 removed

Problem

#372 made the config file the only place policy lives. ModuleOptions in @the-i18n-kit/nuxt is now exactly enabled and failOnInvalidConfig; the artifact carries no policy; nothing reads policy out of an i18nKit block.

Three declaration sites became two, and several places still say three. Two of them are user-facing.

The published JSON Schema — fix this one first

documentMeta.description in packages/cli/src/config/schema-json.ts reads:

Declare it as `.i18n-m

Read the thread · 2026-08-17 · closed · 0 comments

cli: export hiddenCommands so tooling need not regex-parse cli.ts

Context

packages/cli/src/cli.ts filters a module-private hiddenCommands set out of the registry before handing it to citty, so those names cannot be invoked at all. That is deliberate — discover covers detect and list-dirs, find_empty_translations covers empty — and #307 was the bug where scan got filtered by mistake and became a documented-but-unreachable command.

Problem

The set is the only source of truth for which commands are user-facing, and it is not exported. The

Read the thread · 2026-08-17 · closed · 0 comments

check: findings exit 1 as a failed run, not 2 as a tripped gate

Problem

The CLI has three exit codes, and the distinction between two of them is the whole point:

Code Means
0 Succeeded, no gate tripped
1 The run itself failed — bad API key, unreadable project
2 The run succeeded and a requested gate tripped — findings exist, the tool worked

check does not honour it. Its failWhen routes through runFailed in resolveExitCode, so an undefined-key finding is reported as a failed run:

$ the-i18n-cli check --pr

[Read the thread](https://github.com/fabkho/the-i18n-kit/issues/369) · 2026-08-17 · closed · 0 comments

### config: examples entries without a key send "undefined" into the translation prompt

## Problem

`examples` is typed as `z.record(z.string(), z.string())` — a bare string map, requiring nothing. But the consumer treats `key` as mandatory:

return - ${ex.key}: ${pairs}${note}


An example entry without a `key` therefore renders as `- undefined: en: "…", de: "…"` and is sent to the provider as a style example. No validation error, no warning; the model is just handed the word `undefined` as a translation key to imitate.

`note` is genuinely optional and handled — `key` is

[Read the thread](https://github.com/fabkho/the-i18n-kit/issues/367) · 2026-08-17 · closed · 0 comments

### typed config: the self-alias and its error message only know the unscoped specifier

## Problem

`selfAlias()` in the typed-config loader resolves exactly one specifier:

{ 'the-i18n-cli/config': path }


That alias exists so a config file written against the docs works under `npx` in a project that never installed the package — the rescue path called out in #328.

Since the rename shipped (#315, #336), the documented package name is `@the-i18n-kit/cli`. A user following current docs writes:

```ts
import { defineI18nKitConfig } from '@the-i18n-kit/cli/config'

The al

Read the thread · 2026-08-16 · closed · 0 comments

Write the orphan detection concept page

Parent

#300

What to build

The two concept pages whose subject matter is actively changing, deliberately sequenced last among the prose.

Orphan detection — what evidence the scanner recognises, how findings are classified, and which classes are never removed. Its known blind spots matter more than its capabilities: the families it cannot see are exactly the ones a user must declare before trusting a cleanup. This is currently the deepest prose in the repository and it describes a scan

Read the thread · 2026-08-16 · open · 1 comment

Write the Getting Started paths and the home page

Parent

#300

What to build

The front door: the home page and the two on-ramps behind it.

This ticket supersedes #255, whose acceptance criteria are carried over here. The cold-start narrative it describes is the same content, retargeted from the README to the site, where it can be followed without assembling it from scattered flag tables.

The agent on-ramp takes a reader from nothing to a working MCP server, with configuration for each major host, and hands off to the tools reference

Read the thread · 2026-08-16 · open · 0 comments

The remaining reports are on the project's issue tracker.