Preservación de claves
Lingo.dev CLI te permite preservar claves de traducción específicas para que se inicialicen una vez y nunca se sobrescriban en operaciones posteriores de la CLI. Las claves preservadas se copian del origen como marcadores de posición y luego se protegen de actualizaciones automáticas de traducción.
Cuando preservas claves, la CLI las inicializa con valores de origen y luego las omite durante futuras ejecuciones de traducción.
Configuración de la preservación de claves
Añade preservedKeys a la configuración de tu bucket en i18n.json:
{
"locale": {
"source": "en",
"targets": ["es", "fr", "de"]
},
"buckets": {
"json": {
"include": ["locales/[locale].json"],
"preservedKeys": ["legal/privacy", "legal/terms", "marketing/tagline"]
}
}
}
El array preservedKeys utiliza notación de barra diagonal (/) para especificar claves anidadas y asterisco (*) para coincidir con múltiples claves.
Cómo funciona la preservación de claves
Durante el procesamiento de traducción, Lingo.dev CLI:
- Identifica las claves preservadas de tu configuración
- Las excluye de la traducción — las claves preservadas nunca se envían al motor de traducción
- Inicializa las claves faltantes — copia los valores de origen como marcadores de posición para nuevos archivos de destino
- Protege los valores existentes — mantiene sin cambios el contenido traducido manualmente
Ejemplo de flujo de trabajo:
// locales/en.json (source)
{
"welcome": "Welcome to our platform",
"legal": {
"privacy": "We respect your privacy and protect your data.",
"terms": "By using this service, you agree to our terms."
}
}
Con configuración de claves preservadas:
{
"preservedKeys": ["legal/privacy", "legal/terms"]
}
Traducción al español generada (primera ejecución):
// locales/es.json (generated)
{
"welcome": "Bienvenido a nuestra plataforma",
"legal": {
"privacy": "We respect your privacy and protect your data.",
"terms": "By using this service, you agree to our terms."
}
}
La clave welcome se traduce. La sección legal se copia tal cual para traducción manual posterior.
Rutas de claves anidadas
Utiliza notación de barra diagonal (/) para preservar claves a cualquier profundidad:
{
"preservedKeys": [
"legal/privacy/full",
"legal/terms/conditions",
"marketing/campaigns/holiday"
]
}
Esta notación funciona con estructuras anidadas complejas:
// Source structure
{
"legal": {
"privacy": {
"full": "Full privacy policy text..."
}
}
}
La ruta legal/privacy/full preserva esta clave anidada específica.
Claves con puntos
La notación de barra diagonal maneja claves que contienen puntos en sus nombres:
// Source with dotted key names
{
"legal": {
"privacy.policy": "Privacy policy content",
"terms.of.service": "Terms of service content"
}
}
Preserva estas claves con:
{
"preservedKeys": ["legal/privacy.policy", "legal/terms.of.service"]
}
Múltiples tipos de bucket
Los diferentes formatos de archivo pueden tener diferentes claves preservadas:
{
"buckets": {
"json": {
"include": ["locales/[locale].json"],
"preservedKeys": ["legal/privacy", "legal/terms"]
},
"yaml": {
"include": ["translations/[locale].yml"],
"preservedKeys": ["compliance/gdpr", "compliance/ccpa"]
}
}
}
Cada tipo de bucket mantiene su propia lista de claves preservadas según la estructura del contenido.
Preservación de claves vs bloqueo de claves
La preservación de claves y el bloqueo de claves tienen propósitos diferentes:
Preservación de claves (preservedKeys):
- Las claves se inicializan una vez con valores de origen como marcadores de posición
- Los valores de destino existentes nunca se sobrescriben por la CLI
- Se utiliza para contenido que requiere traducción manual o revisión legal
Bloqueo de claves (lockedKeys):
- Las claves se incluyen en el procesamiento de traducción pero los valores permanecen sin cambios
- Las claves bloqueadas siempre coinciden exactamente con los valores de origen
- Se utiliza para identificadores técnicos, nombres de componentes o valores que deben permanecer consistentes
Ejemplo comparativo:
// Source file
{
"welcome": "Welcome",
"system": {
"component": "Lingo.dev Engine"
},
"legal": {
"privacy": "Privacy policy text"
}
}
// Configuration
{
"lockedKeys": ["system/component"],
"preservedKeys": ["legal/privacy"]
}
// Generated target file
{
"welcome": "Bienvenido",
"system": {
"component": "Lingo.dev Engine"
},
"legal": {
"privacy": "Privacy policy text"
}
}
Después de traducir manualmente legal/privacy al español, las ejecuciones posteriores mantienen la traducción manual. La clave system/component siempre permanece en inglés independientemente del contenido del archivo de destino.