Shipi18n
OfficialShipi18n
Detecta traducciones rotas antes de publicarlas. Una puerta de control de calidad de código abierto para tus archivos de localización — y, cuando quieras, un motor de traducción i18n que funciona con tu propia clave de LLM.
Tu es.json dice Hola donde el inglés dice Hello {{name}}. El marcador de posición ha desaparecido, la compilación está en verde y el error se publica. Shipi18n detecta eso, y también detecta el caso más difícil: la cadena que tiene todos los marcadores de posición y aun así dice algo incorrecto.

Una ejecución real, no una maqueta — docs/check-demo.tape la reproduce.
npx @shipi18n/cli check ./locales -s enSin clave de API, sin cuenta, sin configuración. Claves faltantes, marcadores de posición eliminados, plurales colapsados, valores vacíos y texto sin traducir — como salida legible, JSON, SARIF (anotaciones de PR de GitHub) o JUnit.
Luego, cuando quieras que se compruebe el significado, trae tu propia clave. El juez necesita un SDK de proveedor junto con la CLI:
npm i -D @shipi18n/cli @anthropic-ai/sdk # or `openai`
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY
npx shipi18n check ./locales -s en --semanticUn LLM lee cada par e informa de traducciones incorrectas, omisiones y adiciones:
⚠ es coverage 100.0% 0 error(s), 1 warning(s)
warning delete semantic-mistranslation — Translation says 'will save' (guardará)
instead of 'will delete' (eliminará/borrará)Cada marcador de posición está intacto y cada clave está presente, por lo que las comprobaciones estructurales pasan este archivo. Solo leerlo detecta el error. Aviso por defecto: advierte, no hace fallar tu compilación.
Medido, no afirmado. Sobre un corpus de 228 pares confirmado antes de que se escribiera el juez (
60d699b) y con umbrales fijados primero: 54/54 errores plantados detectados (100%) y 12/168 falsos positivos en pares limpios (7,1%), con 6/6 violaciones de glosario encontradas. Reproducido en dos ejecuciones independientes (2026-08-16 y 2026-08-17) usandoclaude-haiku-4-5, 3 pasadas, ~59k tokens en 156s. La precisión de las etiquetas varió entre ejecuciones (100% → 98,1%) — es un modelo, así que léelo como un rango, no como una constante. El arnés está enevals/semantic/. Ejecútalo contra tu propio modelo.
Nada pasa por nuestros servidores, porque no los hay. La única llamada de red es desde tu máquina al proveedor que elegiste.
Paquetes
Package | Description |
El motor: comprobaciones de traducción, el juez semántico, validación de marcadores de posición — además de traducción agnóstica al proveedor y que preserva la estructura, con modo incremental. | |
| |
Servidor MCP: comprueba, compara y revisa archivos de localización desde Claude Desktop, Cursor o cualquier cliente MCP. La validación no necesita clave de API. | |
Plugin de Vite que traduce archivos de localización en tiempo de compilación, con caché. | |
Acción de GitHub que mantiene las traducciones sincronizadas en push/PR. |
Related MCP server: i18n Agent
Por qué
Generar traducciones es un problema resuelto. Media docena de buenas herramientas llenarán tus archivos de localización, y un agente lo hará gratis. Nada comprueba el resultado. Tu CI analiza tu JavaScript, verifica tipos y ejecuta tus pruebas — y luego publica un de.json que nadie ha leído, producido por un modelo que nadie auditó.
Las comprobaciones que existen son estructurales: comparan conjuntos de claves y se detienen ahí. Eso detecta la clave faltante. No detecta la traducción que tiene todas las claves y todos los marcadores de posición y aun así les dice a tus usuarios alemanes lo contrario de lo que querías decir.
Shipi18n es esa puerta que faltaba, en dos capas:
Determinista, sin conexión, sin clave. Claves faltantes y huérfanas, marcadores de posición eliminados o malformados (
{{name}},{count},%s,%d,%1$s,$t(...),%{name}, HTML), formas plurales colapsadas, valores vacíos, texto sin traducir, cobertura por idioma.Semántica, con tu propia clave. Una pasada de LLM como juez solo sobre las claves modificadas, con votación mayoritaria de múltiples pasadas porque las puntuaciones de un juez de una sola pasada son inestables. Informa de traducciones incorrectas, omisiones y adiciones. Aviso por defecto: una herramienta de QA que haga fallar tu compilación se desinstala.
Además, las partes que lo hacen utilizable en el día a día:
Formatos más allá de JSON. Flutter
.arby Apple.xcstrings, incluidos los especificadores%@/%lld.Nativo para CI. Códigos de salida correctos,
--fail-on,--min-coverage, SARIF para anotaciones de PR, JUnit.Las ediciones manuales están protegidas.
shipi18n lockregistra las traducciones que un humano ha aprobado y avisa si algo las sobrescribe, o si la fuente se mueve por debajo de ellas.Sin clave desde tu editor. Los validadores del servidor MCP no llaman a ningún modelo.
También traduce. Agnóstico al proveedor, preserva la estructura, incremental: Anthropic y OpenAI incluidos, y cualquier objeto con un método
complete(prompt)es un adaptador válido.
Comprueba desde tu editor — sin clave de API
@shipi18n/mcp lleva las comprobaciones a cualquier cliente MCP. Las herramientas de validación no llaman a ningún modelo, por lo que no necesitan ninguna clave:
// claude_desktop_config.json
{
"mcpServers": {
"shipi18n": { "command": "npx", "args": ["-y", "@shipi18n/mcp"] }
}
}"Comprueba ./locales contra el inglés y dime qué está roto en español."
review_locales va más allá sin necesitar una clave tampoco: le entrega a tu agente los pares de traducción y los criterios de revisión, y tu agente razona sobre el significado con el modelo que ya ejecuta.
Comprueba en CI — sin necesidad de clave
Las comprobaciones funcionan con traducciones de cualquier fuente: un TMS, otra herramienta, un agente, un humano. Ejecútalo en cada push:
npx @shipi18n/cli check ./locales -s enClaves faltantes, marcadores de posición eliminados, plurales colapsados, valores vacíos y texto sin traducir — informados como salida legible, JSON, SARIF (anotaciones de PR de GitHub) o JUnit. Funciona con árboles JSON simples, paquetes Flutter .arb y catálogos Apple .xcstrings. Determinista y sin conexión: sin LLM, sin clave de API.
Protege las traducciones editadas a mano
Corrige una cadena a mano, bloquéala, y check te avisará si algo la sobrescribe — o si el inglés se mueve por debajo de ella:
npx @shipi18n/cli lock ./locales --keys 'legal.*'.shipi18n/locks.json almacena solo hashes, es seguro de confirmar, y estos hallazgos son advertencias: proteger el trabajo humano nunca debe bloquear un pipeline. Detalles en el README de la CLI.
También traduce
La comprobación funciona con traducciones de cualquier lugar, pero si quieres que Shipi18n también las produzca, lo hace: con tu clave, tu modelo y nada en el medio.
npm i -D @shipi18n/cli @anthropic-ai/sdk # or `openai`
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY
npx shipi18n translate locales/en.json -t es,fr,de✔ es → locales/es.json (2 translated, 0 reused)O desde Node (mismo requisito de SDK):
import { translateJSON } from '@shipi18n/core'
const { result, stats } = await translateJSON({
content: { greeting: 'Hello {{name}}' },
from: 'en',
to: 'es',
provider: 'anthropic', // 'anthropic' | 'openai' | custom { complete } adapter
})
// result → { greeting: 'Hola {{name}}' }Preserva la estructura, seguro con marcadores de posición e incremental: solo se envían al modelo las claves nuevas o modificadas. Luego comprueba el resultado con la misma herramienta.
Desarrollo
Este es un monorepo de pnpm + turbo.
pnpm install
pnpm test # all packages
pnpm --filter @shipi18n/core testChangesets gestiona el versionado: pnpm changeset para añadir uno.
Contribuciones
Las incidencias y las solicitudes de extracción son bienvenidas: consulta CONTRIBUTING.md. pnpm install && pnpm test ejecuta 105 pruebas contra un adaptador simulado, por lo que no necesitas clave de API para trabajar en esto.
Licencia
Apache-2.0 © Shipi18n. Consulta NOTICE.
This server cannot be installed
Maintenance
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables translation of JSON i18n files to multiple languages using various AI providers (Google Gemini, OpenAI, Ollama/DeepSeek) with intelligent caching and deduplication.166
- AlicenseNot gradedqualityDmaintenanceAI-powered translation management built for AI agents. Automate localization with regional sensitivity and zero TMS overhead. Works with Claude Code, Cursor, VS Code via MCP protocol. Supports JSON, YAML, Markdown, PO and more.12MIT
- AlicenseNot gradedqualityBmaintenanceLocalization as code — push, pull, translate, and extract strings from code with AI. 7 MCP tools for type-safe i18n across 182 languages.1742MIT
- FlicenseAqualityCmaintenanceL1-aware grammar, style, translation & tone tools with 70 local rules. Zero API keys needed.4
Related MCP Connectors
Deterministic validation for AI-generated artifacts: JSON Schema, OpenAPI response, SQL syntax.
Translation that never breaks structure: .srt timings, i18n key trees, PDF layout.
AI QA tester — real browsers scan sites for bugs, SEO, perf, and accessibility issues via chat.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Shipi18n/shipi18n'
If you have feedback or need assistance with the MCP directory API, please join our Discord server