Lingo.dev + .json-dictionary

Lingo.dev CLI traduce archivos JSON donde cada cadena traducible contiene múltiples claves de idioma en un solo objeto. A diferencia del formato JSON estándar que separa los idiomas en diferentes archivos, json-dictionary almacena todas las traducciones juntas con claves específicas de idioma como {"en": "Hello", "es": "Hola"}.

Configuración rápida

Crea un archivo de configuración i18n.json:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "json-dictionary": {
      "include": ["content/pages.json"]
    }
  }
}

Estructura de archivos

El formato json-dictionary almacena traducciones como objetos anidados con claves de idioma:

{
  "title": {
    "en": "Welcome to our site",
    "es": "Bienvenido a nuestro sitio"
  },
  "navigation": {
    "home": {
      "en": "Home",
      "es": "Inicio"
    },
    "about": {
      "en": "About Us",
      "es": "Acerca de nosotros"
    }
  },
  "staticValue": "This won't be translated",
  "pages": [
    {
      "title": {
        "en": "Page One",
        "es": "Página Uno"
      }
    }
  ]
}

Traducir todo

npx lingo.dev@latest i18n

El CLI automáticamente:

  • Extrae solo objetos traducibles (aquellos con claves de idioma)
  • Preserva los valores no traducibles sin cambios
  • Añade claves de idioma de destino junto a las existentes
  • Mantiene el orden de las claves del idioma de origen (origen primero, otros alfabéticamente)

Comportamiento de las claves

Detección de traducibles: Solo los objetos que contienen la clave de tu idioma de origen se consideran traducibles. Las cadenas simples, números, booleanos y objetos sin claves de idioma permanecen sin cambios.

Orden de claves: Al añadir traducciones, el idioma de origen aparece primero, seguido por otros idiomas en orden alfabético:

{
  "message": {
    "en": "Original text",
    "de": "Deutscher Text",
    "es": "Texto en español",
    "fr": "Texte français"
  }
}

Soporte anidado: Funciona con estructuras profundamente anidadas y arrays que contienen objetos traducibles.

Configuración avanzada

Excluir archivos

"json-dictionary": {
  "include": ["content/*.json"],
  "exclude": ["content/config.json"]
}