Shipi18n checks your translation files the way ESLint checks your code. The structural pass runs with no API key: missing keys, dropped placeholders across eight syntaxes ({{name}}, {count}, %s, %1$s, %@, $t(), inline HTML), collapsed plurals, empty values and glossary breaches — with SARIF output so GitHub annotates failing keys inline on pull requests.
Add your own LLM key (Anthropic, OpenAI, or any OpenAI-compatible endpoint including local models via Ollama) and a semantic judge reads each translation pair and flags mistranslations, omissions and additions, advisory by default. Measured on a public benchmark (UIStringBench): 54/54 planted errors caught across seven judge models.
Developer tools:
• CLI: @shipi18n/cli — check and translate from the terminal or CI
• MCP server: @shipi18n/mcp — keyless validators for Claude Desktop, Cursor and other MCP clients
• GitHub Action — check mode by default, SARIF PR annotations
• Vite plugin — fill missing keys at build time
• Free in-browser JSON checker at shipi18n.com/free-tools/i18n-checker
Supports JSON, Flutter .arb and Apple .xcstrings. Apache-2.0, no account, no server, no telemetry — your strings and keys never leave your machine.