import fs from 'fs'; import path from 'path'; import yargs from 'yargs'; // Get our args const argv = yargs(process.argv).argv; const { app, output } = argv; const folderPath = './locales/' + app; const namefile = 'translations.json'; const jsonI18n = {}; // Fetch the files in the locales folder fs.readdirSync(folderPath).map((language) => { const languagePath = path.join(folderPath, path.sep, language); // Crowdin output file in folder, we want to treat only these ones if (!fs.lstatSync(languagePath).isDirectory()) { return; } jsonI18n[language] = { translation: {}, }; // Get the json file generated by crowdin const pathTranslateFile = path.join(languagePath, path.sep, namefile); if (!fs.existsSync(pathTranslateFile)) { throw new Error(`File ${pathTranslateFile} not found!`); } const json = JSON.parse(fs.readFileSync(pathTranslateFile, 'utf8')); // Transform the json file to the format expected by i18next const jsonKeyMessage = {}; Object.keys(json) .sort() .forEach((key) => { jsonKeyMessage[key] = json[key].message; }); jsonI18n[language] = { translation: jsonKeyMessage, }; }); if (!Object.keys(jsonI18n).length) { throw new Error(`No translation to deploy`); } // Write the file to the output fs.writeFileSync(output, JSON.stringify(jsonI18n), 'utf8'); console.log(`${app} translations deployed!`);