Tengo un JSON como este:
{ "generic": { "tables": { "header": "Header", "columns": "Columns" }, "yes": "Yes", "no": "No" } }Pero con miles de líneas y más objetos anidados. Necesito traducir todas estas cadenas, así que estoy creando un script para hacerlo. ¿Cómo puedo recorrer cada cadena y reemplazarla con algo?
He buscado y encontrado este hilo: Bucle a través de JSON con node.js pero no puedo encontrar ninguna solución que se ajuste a mis necesidades.
Hice este script rápido:
const fs = require('fs'); const obj = JSON.parse(fs.readFileSync('en.json', 'utf-8')); const translate = (obj, path = '') => { const keys = Object.keys(obj); keys.forEach((key) => { const type = typeof obj[key]; if (type === 'object') { translate(obj[key], path === '' ? key : path + '.' + key); } else { console.log(path + ' --> [' + key + ']: ' + obj[key]); } }); }; translate(obj);Recorre la matriz. En la línea de registro de la consola, tengo la ruta completa del elemento de traducción (es decir, 'generic.tables.header') y tengo la clave y el valor de la traducción.
¿Cómo puedo hacer un nuevo objeto que contenga las claves?
Creo que encontré una manera, en lugar de guardar la ruta, crear un objeto vacío e insertar las claves allí:
const fs = require('fs'); const obj = JSON.parse(fs.readFileSync('en.json', 'utf-8')); const newObj = {}; const translate = (obj, path = '', objVal) => { const keys = Object.keys(obj); keys.forEach((key) => { const type = typeof obj[key]; if (type === 'object') { objVal[key] = {}; const newObjVal = objVal[key]; translate(obj[key], path === '' ? key : path + '.' + key, newObjVal); } else { objVal[key] = obj[key]; //console.log(path + ' --> [' + key + ']: ' + obj[key]); } }); }; translate(obj, '', newObj);