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.
51 lines
1.5 KiB
JavaScript
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!`);
|