Formatos compatibles

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

Obsoleto

Esta documentación cubre el CLI heredado (v0). La versión actual del CLI es la v1. Ver la documentación actual de CLI

El CLI de Lingo.dev usa tipos de bucket para analizar y traducir distintos formatos de archivo. Cada tipo de bucket cuenta con un parser específico para un formato en particular. Configura uno o varios buckets en tu i18n.json para definir qué archivos debe traducir el CLI.

Tipos de bucket#

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

Modos de salida#

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

Archivos separados por idioma - el CLI crea un archivo distinto para cada idioma de destino. Los patrones de inclusión deben incluir el placeholder [locale]:

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

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

Modifica el archivo fuente - el CLI escribe las traducciones en el mismo archivo que contiene el contenido fuente. El placeholder [locale] no se usa:

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

Los archivos CSV normalmente almacenan todos los idiomas en columnas dentro de un solo archivo. Los catálogos de Xcode .xcstrings y los YAML con claves raíz funcionan de forma similar.

Ejemplos de configuración#

App 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"]
    }
  }
}

App 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 múltiples 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 por bucket#

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

FunciónBuckets compatiblesDescripción
Key LockingFormatos de clave-valor (JSON, YAML, etc.)Copia los valores fuente 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 actualizaciones
Translator NotesJSONC, XCStringsAñade contexto mediante comentarios para mejorar la traducción

Reglas de los patrones de inclusión#

  • Los patrones son relativos a la ubicación del archivo i18n.json
  • Usa [locale] como placeholder para los códigos de idioma (obligatorio en los buckets de "archivos separados")
  • 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 de forma predeterminada; agrega tus propias entradas exclude encima según lo necesites (requiere CLI 0.135.0+)
  • Las extensiones de archivo no afectan el análisis: el tipo de bucket determina el parser

Siguientes pasos#