const async = require('async'); const fs = require('fs'); const _ = require('underscore'); if (!process.argv[2]) { console.error('\You must inform you Google API key: node auto-translate.js [google-api-key]\n'); process.exit(); } const googleTranslate = require('google-translate')(process.argv[2]); googleTranslate.getSupportedLanguages(function(err, langs) { if (err) { console.log(err); return; } async.eachSeries(['../../packages/rocketchat-lib/i18n/', '../../packages/rocketchat-livechat/app/i18n/'], function(path, callback) { console.log(`Translating files in: ${ path }`); const enContents = fs.readFileSync(`${ path }en.i18n.json`, 'utf-8'); const enUnsorted = JSON.parse(enContents); const en = {}; _.keys(enUnsorted).sort(function(a, b) { if (a.toLowerCase() !== b.toLowerCase()) { return a.toLowerCase().localeCompare(b.toLowerCase()); } else { return a.localeCompare(b); } }).forEach(function(key) { en[key] = enUnsorted[key]; }); fs.writeFileSync(`${ path }en.i18n.json`, JSON.stringify(en, null, ' ').replace(/": "/g, '" : "'), 'utf8'); const files = fs.readdirSync(path); async.eachSeries(files, function(file, callback) { if (file === 'en.i18n.json') { return callback(); } let lang = file.replace('.i18n.json', ''); if (lang === 'ug' || lang === 'zh-HK') { return callback(); } const destContents = fs.readFileSync(path + file, 'utf-8'); const destJson = JSON.parse(destContents); const toTranslate = {}; const newContent = {}; for (let key in en) { if (en.hasOwnProperty(key)) { key = `${ key }`; if (destJson[key]) { newContent[key] = destJson[key]; } else { newContent[key] = ''; toTranslate[key] = en[key]; } } } const invertToTranslate = _.invert(toTranslate); const toTranslateLang = _.keys(invertToTranslate); if (lang === 'ms-MY') { lang = 'ms'; } if (lang === 'ta-IN') { lang = 'ta'; } if (lang === 'he') { lang = 'iw'; } if (langs.indexOf(lang) !== -1 && toTranslateLang.length > 1) { console.log(lang, toTranslateLang.length); googleTranslate.translate(toTranslateLang, 'en', lang, function(err, translations) { if (err) { console.log(lang, err); } else { for (const key in translations) { if (translations.hasOwnProperty(key)) { newContent[invertToTranslate[translations[key].originalText]] = translations[key].translatedText; } } const newJsonString = JSON.stringify(newContent, null, ' ').replace(/": "/g, '" : "'); fs.writeFileSync(path + file, newJsonString, 'utf8'); setTimeout(function() { return callback(); }, 1000); } }); } else { const newJsonString = JSON.stringify(newContent, null, ' ').replace(/": "/g, '" : "'); fs.writeFileSync(path + file, newJsonString, 'utf8'); return callback(); } }, function() { return callback(); }); }); });