Skip to main content
Glama

Shipi18n

CI npm MCP License

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.

shipi18n check finding a dropped placeholder, then an LLM catching a translation that says "will save" where the English says "delete"

Una ejecución real, no una maqueta — docs/check-demo.tape la reproduce.

npx @shipi18n/cli check ./locales -s en

Sin 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 --semantic

Un 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) usando claude-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á en evals/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

@shipi18n/core

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.

@shipi18n/cli

shipi18n check ./locales para CI, --semantic para el significado, lock para proteger ediciones manuales, translate cuando lo necesites.

@shipi18n/mcp

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.

vite-plugin-shipi18n

Plugin de Vite que traduce archivos de localización en tiempo de compilación, con caché.

shipi18n-github-action

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 .arb y 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 lock registra 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 en

Claves 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 test

Changesets 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.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
2wRelease cycle
2Releases (12mo)
Commit activity

Related MCP Servers

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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