Files
people/src/frontend/packages/i18n/format-deploy.mjs
Anthony LC 3d0824e023 🌐(i18n) create package i18n
We create a package i18n to manage the translations of the project.
It help us to extract the translations from the frontend to
be deployed to crowdin.
It also help us to format the translations from crowdin to
be used by the frontend apps.
2024-02-05 15:34:37 +01:00

50 lines
1.3 KiB
JavaScript

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)) {
return;
}
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,
};
});
// Write the file to the output
fs.writeFileSync(output, JSON.stringify(jsonI18n), "utf8");
console.log(`${app} translations deployed!`);