The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Rocket.Chat/private/node_scripts/auto-translate.js

101 lines
2.9 KiB

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();
});
});
});