const fs = require('fs-extra');
const path = require('path');
const YAML = require('js-yaml');
const readDirP = require('readdirp-walk');
const { parseMarkdown } = require('@freecodecamp/challenge-md-parser');
const { Translate } = require('@google-cloud/translate');
const lang = 'pt';
const langFull = 'portuguese';
const outputDir = path.resolve(__dirname, `./challenges/${langFull}`);
fs.ensureDirSync(outputDir);
readDirP({
root: path.resolve(__dirname, './challenges/english')
}).on('data', translateChallenge);
async function translateChallenge(file) {
const { name, path: filePath, fullPath, stat } = file;
if (stat.isDirectory() || name === '.DS_Store') {
return null;
}
const blockName = getBlockNameFromPath(filePath);
const { fileName: superBlock } = superBlockInfoFromPath(filePath);
const outputFile = `${outputDir}/${superBlock}/${blockName}/${name.replace(
'english',
langFull
)}`;
if (fs.existsSync(outputFile)) {
return null;
}
const challenge = await parseMarkdown(fullPath);
const { title, description, instructions, tests } = challenge;
challenge['videoUrl'] = '';
if (challenge['guideUrl']) {
challenge['guideUrl'] = challenge['guideUrl'].replace('www', langFull);
}
const translatePromises = [
translateText(title),
translateText(description),
translateText(instructions),
...tests.map(
test =>
new Promise(async (resolve, reject) => {
const { testString, text } = test;
const translatedText = await translateText(text).catch(reject);
return resolve({
text: translatedText ? translatedText.join(' ').trim() : '',
testString
});
})
)
];
return Promise.all(translatePromises).then(
([title, description, instructions, ...tests]) => {
const { files = {}, solutions = [], ...challengeMeta } = challenge;
const md = `---
${YAML.dump(
Object.assign(challengeMeta, {
localeTitle: title ? title.join(' ').trim() : ''
}),
{ lineWidth: 10000 }
)}---
## Description
${description}
## Instructions
${instructions}
## Tests