/** * For some unexpected reasons it can happen that the translations in Crowdin are lost. * If that happens, we can rebuild the Crowdin translations file from our translated json file. * * This script is used to rebuild the translations file from the empty skeleton file generated by Crowdin. */ import fs from 'fs'; import path from 'path'; import { hideBin } from 'yargs/helpers'; import yargs from 'yargs/yargs'; // Get our args const argv = yargs(hideBin(process.argv)).argv; const { app, output, language } = argv; const folderPath = './locales/' + app; const namefile = 'translations-skeleton.json'; const nameRebuildfile = 'translations-rebuild.json'; const pathRebuildFile = path.join(folderPath, path.sep, nameRebuildfile); // Get the skeleton generated from crowdin const pathSkeletonFile = path.join(folderPath, path.sep, namefile); if (!fs.existsSync(pathSkeletonFile)) { throw new Error(`File ${pathSkeletonFile} not found!`); } // Get the translated file if (!fs.existsSync(output)) { throw new Error(`File ${output} not found!`); } const jsonSkel = JSON.parse(fs.readFileSync(pathSkeletonFile, 'utf8')); const jsonTrans = JSON.parse(fs.readFileSync(output, 'utf8')); // Transform the json file to the format expected by i18next const jsonRebuild = jsonSkel; Object.keys(jsonSkel) .sort() .forEach((key) => { jsonRebuild[key]['message'] = jsonTrans[language]['translation'][key] || ''; }); // Write the file to the output fs.writeFileSync(pathRebuildFile, JSON.stringify(jsonRebuild), 'utf8'); console.log(`${app} translations rebuild!`);