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 } = 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).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!`);