freeCodeCamp/tools/crowdin/one-off-scripts/mark-translated-strings-as-...

55 lines
1.8 KiB
JavaScript

/*
This one-off script can be used to make any string in a Crowdin project to be marked as "Done" in case a workflow
change inadvertently causes strings, which already have translations (and even an approved translation), to be
reverted to "To Do".
Specifying a projectId in the .env file allows the script to find any string with at least one translation,
adds a new temporary translation to it, and then delete the newly added translation. It is the addition of a
new translation that switches the status back to "Done" in the Crowdsourcing view on Crowdin.
*/
require('dotenv').config({ path: `${__dirname}/../.env` });
const getLanguages = require('../utils/get-languages');
const {
addTranslation,
deleteTranslation,
getLanguageTranslations
} = require('../utils/strings');
const markTranslatedStringsAsDone = async projectId => {
console.log('starting script...');
const languageIds = await getLanguages(projectId);
for (let languageId of languageIds) {
const translations = await getLanguageTranslations({
projectId,
languageId
});
if (translations && translations.length) {
console.log(
`${languageId} has ${translations.length} strings with at least one translation`
);
for (let translation of translations) {
const { stringId } = translation.data;
const newTranslation = await addTranslation(
projectId,
stringId,
languageId,
'this is a camperbot test translation'
);
if (newTranslation && newTranslation.id);
console.log(
`added new translation (translationId: ${newTranslation.id}) for stringId: ${stringId}`
);
await deleteTranslation(projectId, newTranslation.id);
}
}
}
console.log('complete');
};
const projectId = process.env.CROWDIN_PROJECT_ID;
markTranslatedStringsAsDone(projectId);