- en{count} items selected
- jaアイテムを選択しました
- ↳ {count} is gone
A placeholder vanishes
The number was in the English. The translation dropped it, so every user sees a sentence with no count.
placeholder_mismatchFREE CLI · CODING AGENTS, CI, TERMINAL
Claude Code, Cursor, Codex and five other agents translate through StringLane over MCP, and CI fails the build on a broken locale. A failed check writes nothing to your files.
Read https://stringlane.app/docs/cli/agent-setup.md and set up StringLane for this project.Or install it yourself: npm install -g @stringlane/cli v0.9.0 · Node 22+ · free
WHY A GREEN BUILD IS NOT ENOUGH
Your agent translates thirty languages in a minute. These three slip through every build. Over MCP and in CI, StringLane refuses each one before a file is written.
The number was in the English. The translation dropped it, so every user sees a sentence with no count.
placeholder_mismatchEnglish has two forms. Ukrainian needs four. The model wrote three, so a count like 5 gets the wrong ending.
missing_keyYou added a string last week. Twelve languages have it. One does not, and it ships in English.
missing_keyStructure, not taste. Whether a sentence reads well is still yours.
ICU syntax
Unclosed braces and broken selects, before the build does.
icu_parse_errorGuarded terms
Flags a brand or product name that got translated.
guarded_word_violationLength limits
Per-key budgets, so a German label still fits its button.
max_length_exceededEleven MCP tools, six of them write. Your agent translates and StringLane checks before anything reaches your files.
stringlane setup mcp --host cursorAgent setup guide Exit 1 on issues, 2 when it could not run. A committed baseline lets a messy project adopt the gate today.
stringlane check . --jsonCI guide See which locales are behind and what is broken. Writes nothing to your files.
stringlane check .Inspect and check a project The MCP server works in all eight. The write guard is built from whatever each host lets StringLane intercept, so it differs, and this is exactly how.
Plugin
Asks you first
Plugin
Refuses, and says how to lift it
Extension
Refuses, and says how to lift it
Local plugin, or paste
Refuses, and says how to lift it
Config you paste
Confirms, from Zed’s own permissions
Config you paste
Confirms, from OpenCode’s own permissions
One command
Installs, but guards nothing yet
Config you paste
Refuses, and says how to lift it
Every host gets the real configuration, printed for the exact file it belongs in. Claude Code is the one host where StringLane writes it for you. What each of the eight gets.
Every check above runs before anything is written. When one fails, StringLane stops, writes nothing to your files, and tells your agent why.
inspect, check, plan and validate never touch your repo.
If a file changed since the plan, apply stops and says so.
Every file is built and re-parsed first. One error, nothing written to your files.
Usage events, described on /privacy. Off with stringlane telemetry off.
inspect, check, plan and validate write nothing into your repository: not a lock file, not a re-saved locale file, not a byte. (They do keep state outside your project, in StringLane's own state directory: a random install ID unless usage data is off through DO_NOT_TRACK=1, STRINGLANE_TELEMETRY=0 or a CI environment, the date of the last update check unless that check is off, and from check a cache of the key names and line numbers it found in each source file.) The commands that do write ask first, and refuse outright when there is no terminal to ask at unless you passed --yes, so a CI job cannot commit a decision nobody made. Over MCP the line is drawn by your agent host: it asks you before any of the six writing tools runs, the same way it asks before editing a file. There is no flag the model fills in on your behalf. An earlier version had one, and it was removed because a field the agent sets itself is not consent.stringlane update, which is the one command that talks to a model and the one that spends money, and it asks before it does. Everything else runs without a key, including the whole agent workflow: in agent mode the model is the one your agent already uses. When you do use update, the key is read from your environment and nowhere else: never from stringlane.yaml, never written to a config file, a keychain, a log, or any report it produces.stringlane setup mcp --host <host> prints the entry in that host's own shape and names the exact file it belongs in. Claude Code is the one where --apply then writes it, after backing the file up; everywhere else it prints and you paste, because StringLane will not merge into a file format nobody has run yet. The write guard is narrower still and differs per host. What each host gets.stringlane baseline write writes today's findings to .stringlane/baseline.yaml; commit it, and check then fails only on issues that are new. Accepted issues are still counted and printed on every run rather than hidden, a suppressed entry is reported as stale once you fix the underlying problem, and nothing expires on a timer. A gate that turns red on a date nobody chose is a gate that gets switched off. A baseline cannot hide a stale translation: with source stamps on, baseline write leaves out stale and unconfirmed translations and says how many, and check refuses a baseline that holds one.stringlane update that calls a model adds one more: whether the provider is cloud or local, a range for how many strings it set out to translate, and whether it finished. The MCP server sends one event when it starts and one when the session ends, with ranges for how often each tool was used. Every event carries the CLI version, your operating system and a random ID generated on your machine, so runs from one install can be linked. It never sends your paths, keys, strings, argument values, or which provider or model you use. Turn it off with stringlane telemetry off, or STRINGLANE_TELEMETRY=0 or DO_NOT_TRACK=1 in your environment. It sends nothing at all when it detects CI, and no environment variable can switch it back on over a stored opt-out. The full policy.Read https://stringlane.app/docs/cli/agent-setup.md and set up StringLane for this project.Or install it yourself with npm install -g @stringlane/cli. The desktop app runs the same checks in a window.