Formatos compatibles

Max PrilutskiyCEO y cofundadorActualizado: hace 3 meses · 4 min de lectura

Obsoleto

Estos documentos cubren el CLI heredado (v0). El CLI actual es v1. Ver la documentación actual del CLI

La CLI de Lingo.dev utiliza tipos de bucket para analizar y traducir distintos formatos de archivo. Cada tipo de bucket es un parser específico diseñado para un formato concreto. Configura uno o varios buckets en tu i18n.json para definir qué archivos debe traducir la CLI.

Tipos de bucket#

Tipo de bucketFormatoModo de salida¿Requiere [locale]?
jsonArchivos JSONArchivos independientes por idioma
json5Archivos JSON5Archivos independientes por idioma
jsoncArchivos JSONC (con comentarios)Archivos independientes por idioma
json-dictionaryDiccionario JSON (clave-valor plano)Archivos independientes por idioma
yamlArchivos YAMLArchivos independientes por idioma
yaml-root-keyYAML con claves raíz de idiomaModifica el archivo de origenNo
markdownArchivos MarkdownArchivos independientes por idioma
mdxArchivos MDXArchivos independientes por idioma
markdocArchivos MarkdocArchivos independientes por idioma
htmlArchivos HTMLArchivos independientes por idioma
mjmlPlantillas de email en MJMLArchivos independientes por idioma
androidRecursos XML de AndroidArchivos independientes por idioma
xcode-stringsArchivos .strings de XcodeArchivos independientes por idioma
xcode-stringsdictArchivos .stringsdict de XcodeArchivos independientes por idioma
xcode-xcstringsCatálogos .xcstrings de XcodeModifica el archivo de origenNo
flutterArchivos ARB de FlutterArchivos independientes por idioma
poArchivos PO de GNU gettextArchivos independientes por idioma
propertiesArchivos .properties de JavaArchivos independientes por idioma
csvArchivos CSVModifica el archivo de origenNo
csv-per-localeArchivos CSV (uno por idioma)Archivos independientes por idioma
xmlArchivos XML genéricosArchivos independientes por idioma
xliffArchivos XLIFFArchivos independientes por idioma
srtArchivos de subtítulos SRTArchivos independientes por idioma
vttArchivos de subtítulos VTTArchivos independientes por idioma
phpArrays de localización en PHPArchivos independientes por idioma
typescriptArchivos TypeScriptArchivos independientes por idioma
vue-jsonBloques JSON de Vue i18nArchivos independientes por idioma
txtArchivos de texto planoArchivos independientes por idioma

Modos de salida#

Los buckets funcionan en uno de estos dos modos de salida:

Archivos independientes por idioma: la CLI crea un archivo distinto para cada idioma de destino. Los patrones include deben contener el marcador [locale]:

json
{
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"]
    }
  }
}

Esto genera locales/en.json, locales/es.json, locales/fr.json, etc.

Modifica el archivo de origen: la CLI escribe las traducciones en el mismo archivo que contiene el contenido original. En este caso, no se utiliza el marcador [locale]:

json
{
  "buckets": {
    "csv": {
      "include": ["translations.csv"]
    }
  }
}

Los archivos CSV suelen almacenar todos los idiomas en columnas dentro de un único archivo. Los catálogos .xcstrings de Xcode y los archivos YAML con claves raíz funcionan de forma parecida.

Ejemplos de configuración#

Aplicación web con JSON#

json
{
  "buckets": {
    "json": {
      "include": ["src/locales/[locale].json"],
      "lockedKeys": ["brand/name"]
    }
  }
}

Sitio de documentación con Markdown#

json
{
  "buckets": {
    "markdown": {
      "include": ["docs/[locale]/*.md"],
      "exclude": ["docs/[locale]/drafts/*.md"]
    }
  }
}

Aplicación móvil (iOS + Android)#

json
{
  "buckets": {
    "xcode-xcstrings": {
      "include": ["ios/Localizable.xcstrings"]
    },
    "android": {
      "include": ["android/app/src/main/res/values-[locale]/strings.xml"]
    }
  }
}

Monorepo con varios formatos#

json
{
  "buckets": {
    "json": {
      "include": ["apps/web/locales/[locale].json"]
    },
    "mdx": {
      "include": ["packages/docs/content/[locale]/*.mdx"]
    },
    "flutter": {
      "include": ["apps/mobile/lib/l10n/app_[locale].arb"]
    }
  }
}

Funciones específicas de cada bucket#

Algunos buckets admiten funciones adicionales más allá de los patrones include/exclude:

FunciónBuckets compatiblesDescripción
Key LockingFormatos de clave-valor (JSON, YAML, etc.)Copia los valores de origen sin traducirlos
Key IgnoringFormatos de clave-valorExcluye por completo las claves de los archivos de destino
Key PreservingFormatos de clave-valorLas inicializa una vez y luego las protege de futuras actualizaciones
Translator NotesJSONC, XCStringsAporta contexto mediante comentarios para mejorar la traducción

Reglas de los patrones include#

  • Los patrones son relativos a la ubicación del archivo i18n.json
  • Usa [locale] como marcador para los códigos de idioma (obligatorio en los buckets de "archivos independientes")
  • El asterisco (*) coincide con cualquier nombre de archivo: locales/[locale]/*.json
  • Los patrones recursivos (**) coinciden con archivos a cualquier nivel de profundidad: src/**/[locale].json, config/locales/**/[locale].yml. Cuando un patrón usa **, node_modules, .git, dist, build, .next y .turbo se excluyen por defecto; añade tus propias entradas exclude además según lo necesites (requiere CLI 0.135.0+)
  • Las extensiones de archivo no afectan al análisis: el tipo de bucket determina qué parser se utiliza

Siguientes pasos#