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