Configuración de i18n.json
i18n.json es un archivo de configuración estándar que controla el comportamiento de Lingo.dev CLI y las integraciones CI/CD de Lingo.dev.
i18n.json implementa una configuración basada en esquemas que separa la configuración de idiomas, los patrones de descubrimiento de archivos y la configuración del motor de traducción de IA en secciones distintas. Como resultado, los desarrolladores comprenden exactamente cómo funciona su flujo de trabajo de localización al leer el archivo de configuración.
Esta guía asume que tienes instalado Lingo.dev CLI y estás configurando un flujo de trabajo de traducción. Al finalizar, comprenderás la estructura completa de i18n.json, las opciones de configuración y cómo cada sección controla el comportamiento de la traducción.
Versión
El campo version especifica la versión del esquema de configuración:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": 1.8
}
Elementos de configuración:
$schema
— Apunta a la definición del esquema JSON para autocompletado y validación en el IDE. El esquema ayuda a detectar errores de configuración tempranamente proporcionando documentación en línea y verificación de tipos.version
— Versión del esquema de configuración para compatibilidad de migración.
Lingo.dev CLI utiliza este campo para la migración automática de configuración cuando se lanzan nuevas versiones del esquema.
Configuración de localización
La sección locale define qué idiomas procesa Lingo.dev CLI:
{
"locale": {
"source": "en",
"targets": ["es", "fr", "ja", "de"]
}
}
Los códigos de idioma siguen el estándar BCP 47 para etiquetas de idioma, que incorpora códigos de idioma de ISO 639 y códigos de región opcionales de ISO 3166-1. Los ejemplos incluyen en
, en-US
, es-ES
y zh-Hans
.
Lingo.dev CLI también admite formatos de localización específicos de plataforma como la convención en-rUS
de Android para directorios de recursos. Para obtener la lista completa de códigos de localización admitidos, ejecuta:
npx lingo.dev@latest show locale sources # Idiomas de origen disponibles
npx lingo.dev@latest show locale targets # Idiomas de destino disponibles
Si tu código de localización no está admitido, ¡por favor abre una pull request para añadirlo!
Elementos de configuración:
locale.source
— Código del idioma de origen que identifica qué archivos contienen el contenido autoritativo. Todas las traducciones fluyen desde el origen hacia los destinos.locale.targets
— Array de códigos de idiomas de destino que representan tus mercados objetivo. Cada código corresponde a un archivo separado o sección dentro de un archivo, dependiendo del formato.
Comandos de verificación de idioma:
Configuración del proveedor
La sección provider determina qué servicio de traducción de IA utiliza Lingo.dev CLI. Esta sección es opcional y, cuando se omite, utiliza por defecto el motor de traducción de IA de Lingo.dev.
Para acceso directo a la API de LLM:
{
"provider": {
"id": "openai",
"model": "gpt-4o-mini",
"prompt": "Tu prompt de traducción personalizado con marcadores {source} y {target}"
}
}
Para el motor de Lingo.dev:
Para utilizar el motor de Lingo.dev, omite completamente la sección provider. El motor selecciona automáticamente los modelos y prompts basándose en investigaciones de optimización y en tu configuración del motor de Lingo.dev.
Elementos de configuración:
provider.id
— Identificador del servicio de traducción de IA (p. ej. "openai" o "anthropic").provider.model
— Nombre del modelo de traducción de IA (p. ej. "gpt-4o-mini" para OpenAI o "claude-3-haiku" para Anthropic).provider.prompt
— Prompt del sistema que guía el comportamiento de traducción. Los marcadores{source}
y{target}
se reemplazan con los códigos de idioma reales en tiempo de ejecución.
Configuración de buckets
Los buckets definen patrones de descubrimiento de archivos y reglas de procesamiento. Cada bucket representa un formato de archivo con patrones específicos de inclusión/exclusión.
{
"buckets": {
"json": {
"include": ["locales/[locale].json", "app/[locale]/*.json"],
"exclude": ["locales/[locale]/internal.json"],
"lockedKeys": ["app/version", "config/apiUrl"],
"injectLocale": ["settings.language"]
},
"markdown": {
"include": ["docs/[locale]/*.md"],
"exclude": ["docs/[locale]/drafts/*.md"]
}
}
}
Elementos de configuración:
buckets.[bucket-type]
— Grupo de configuración para un bucket de formato de archivo específico.buckets.[bucket-type].include
— Array de patrones de descubrimiento de archivos. Puede contener strings u objetos.buckets.[bucket-type].include.[string]
— Patrón simple de ruta de archivo con marcador[locale]
.buckets.[bucket-type].include.[object]
— Configuración avanzada de patrones con las siguientes propiedades:path
— El patrón de ruta de archivo con marcador[locale]
.delimiter
— El delimitador a utilizar para los códigos de locale. Por defecto es-
(guion), puede cambiarse a_
(guion bajo). Anula el delimitador de la configuración de locale.
buckets.[bucket-type].exclude
— Array de patrones de exclusión de archivos que se omitirán durante el procesamiento.buckets.[bucket-type].lockedKeys
— Array de claves que no deben traducirse. Utiliza la barra diagonal/
como separador para claves anidadas.buckets.[bucket-type].ignoredKeys
— Array de claves que deben ignorarse durante la traducción. Utiliza la barra diagonal/
como separador para claves anidadas.buckets.[bucket-type].injectLocale
— Array de claves donde el código de locale debe inyectarse automáticamente.
Estructura básica de patrones
Los patrones de inclusión utilizan una sintaxis similar a glob con el marcador especial [locale]
:
locales/[locale].json
→locales/en.json
,locales/es.json
docs/[locale]/*.md
→docs/en/*.md
,docs/es/*.md
Los patrones de exclusión evitan el procesamiento de archivos específicos dentro de los patrones de inclusión.
Opciones avanzadas de patrones
Delimitadores de localización personalizados para diferentes formatos de nombres de archivo:
{
"include": [
"standard/[locale].json",
{
"path": "underscore/[locale].json",
"delimiter": "_"
}
]
}
Delimitadores disponibles:
-
(guion):en-US.json
_
(guion bajo):en_US.json
Consejo: Esta configuración controla el delimitador utilizado en el nombre del archivo, por lo que puede usarlo en una configuración de monorepo donde diferentes proyectos tienen diferentes convenciones de delimitadores.
Tipos de buckets compatibles
Lingo.dev CLI admite los siguientes tipos de buckets para diferentes formatos de archivo:
android
— Archivos de recursos XML de Androidcsv
— Archivos CSV con archivos separados para cada idioma de destinoflutter
— Archivos ARB de Flutterhtml
— Archivos HTML con archivos separados para cada idioma de destinojson
— Archivos JSON con archivos separados para cada idioma de destinomarkdown
— Archivos Markdown con archivos separados para cada idioma de destinomdx
— Archivos MDX con archivos separados para cada idioma de destinoxcode-strings
— Archivos .strings heredados de Xcodexcode-stringsdict
— Archivos .stringsdict de Xcode para pluralizaciónxcode-xcstrings
— Archivos de catálogo de strings de Xcodeyaml
— Archivos YAML con archivos separados para cada idioma de destinoyaml-root-key
— Archivos YAML con claves raíz basadas en la localizaciónproperties
— Archivos .properties de Javapo
— Archivos .po de GNU gettextxml
— Archivos XML genéricos con archivos separados para cada idioma de destinophp
— Archivos de array de PHPvue-json
— Archivos JSON de i18n de Vue.jstypescript
— Archivos TypeScript con archivos separados para cada idioma de destino
Ejemplos de configuración
Configuración básica
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": 1.8,
"locale": {
"source": "en",
"targets": ["es", "fr", "ja"]
},
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}
Configuración de monorepo
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": 1.8,
"locale": {
"source": "en-US",
"targets": ["es-ES", "fr-FR"]
},
"buckets": {
"json": {
"include": ["apps/web/locales/[locale].json"]
},
"mdx": {
"include": ["packages/docs/content/[locale]/*.mdx"]
},
"xcode-xcstrings": {
"include": ["ios/Localizable.xcstrings"]
},
"android": {
"include": ["android/values-[locale]/strings.xml"]
}
}
}
Migración de versiones
i18n.json implementa una migración inteligente de versiones que actualiza automáticamente su configuración a versiones más recientes del esquema mientras preserva todos los ajustes del usuario.
Cuando Lingo.dev CLI detecta una versión de configuración anterior:
- Crea una copia de seguridad de su archivo
i18n.json
actual - Migra la configuración a la última versión del esquema
- Conserva todos los ajustes incluyendo proveedores personalizados, configuraciones de buckets y claves bloqueadas
- Actualiza el campo de versión para que coincida con el esquema actual
Comportamiento de migración:
La migración se activa automáticamente durante cualquier operación de CLI que lea el archivo de configuración. No se requiere intervención manual, y su flujo de trabajo de traducción continúa sin interrupciones.
Este sistema de migración asegura que las configuraciones de i18n.json permanezcan compatibles con las actualizaciones de Lingo.dev CLI mientras mantiene la compatibilidad con proyectos existentes.