const fs = require('fs'); const path = require('path'); const translate = require('google-translate-api'); const non_english_regex = new RegExp('[^\u0000-\u007F]+'); const translateKey = 'YOUR_API_KEY_HERE'; const googleTranslate = require('google-translate')(translateKey); /* Helper functions */ /* from comment from TifPun located @ https://gist.github.com/kethinov/6658166 */ function walkSync(dir, filelist) { var files = fs.readdirSync(dir); filelist = filelist || []; files.forEach(function(file) { if (fs.statSync(path.join(dir, file)).isDirectory()) { filelist = walkSync(path.join(dir, file), filelist); } else { filelist.push(path.join(dir, file)); } }); return filelist; }; function translatePath(dir) { var results = walkSync(dir); var promises = []; if (results) { for(var i = 0; i < results.length; i++) { const file = results[i]; const parsedFile = path.parse(file); if (non_english_regex.test(parsedFile.name) && parsedFile.name.indexOf('%') == -1) { var promise = new Promise(function(resolve, reject) { googleTranslate.translate(parsedFile.name, 'en', function(err, translation) { if (err) { reject(err); } var newName = path.join(parsedFile.dir, translation.translatedText + parsedFile.ext); fs.rename(file, newName, function(error) { if (error) { reject(err); } console.log('renamed file: ' + file + ', to ' + newName); resolve(); }); }); }); promises.push(promise); } } } else { console.log("no files"); } return promises; } /* Main function */ function main() { if (process.argv.length != 3) { console.log('usage: node translate.js [path to translate]'); } else { console.log("checking path: " + process.argv[2]); Promise.all(translatePath(process.argv[2])).then(function() { console.log("translation complete!"); }); } } main();