This repository has been archived on 2026-03-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
docs/src/frontend/packages/i18n/rebuild-translations.mjs
Anthony LC d701195ae5 🧑‍💻(i18n) rebuild translations for crowdin
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.
"translations-skeleton.json" is the downloaded
source file from Crowdin.
It will generate "translations-rebuild.json",
which can be uploaded directly to Crowdin.
2024-10-08 16:30:50 +02:00

51 lines
1.5 KiB
JavaScript

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