ter-localization-cli
Version:
Quick and powerful library for localization for react / react native application
111 lines (82 loc) • 3.58 kB
JavaScript
var _index = _interopRequireDefault(require("../helpers/index"));
var _fs = _interopRequireDefault(require("fs"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
processDirectory(_index.default.argv.options.file || './src');
function processDirectory(path) {
var files = fileList(path);
var allWords = files.reduce(function (total, file) {
return [].concat(_toConsumableArray(total), _toConsumableArray(processFile(file)));
}, []);
var allUniqueWord = allWords.reduce(function (total, word) {
if (total.every(function (w) {
return word.group !== w.group || word.key !== w.key;
})) {
total.push(word);
}
return total;
}, []);
allUniqueWord.map(function (word) {
addWord(word);
});
}
function addWord(_ref) {
var group = _ref.group,
key = _ref.key;
var languages = _index.default.io.read(_index.default.config());
Object.keys(languages).map(function (code) {
if (!languages[code][group]) {
languages[code][group] = {};
}
if (!languages[code][group][key]) {
languages[code][group][key] = key;
}
});
_index.default.io.write(_index.default.config(), languages);
}
function fileList(dir, filelist) {
var files = _fs.default.readdirSync(dir);
filelist = filelist || [];
files.forEach(function (file) {
if (_fs.default.statSync(dir + '/' + file).isDirectory()) {
filelist = fileList(dir + '/' + file, filelist);
} else {
filelist.push(dir + '/' + file);
}
});
return filelist;
}
;
function processFile(path) {
var content = _fs.default.readFileSync(path, 'utf8');
var translateRegex = /(TranslateService.t\(['"`].*['"`]\)\(['"`].*['"`][,)])/gm;
var matches = content.match(translateRegex);
if (matches) {
var words = matches.map(function (match) {
return exportGroupAndKey(match);
});
return words;
}
return [];
}
function exportGroupAndKey(string) {
var regex = /^TranslateService.t\(['"`](.*)['"`]\)\(['"`](.*)['"`][,)]/gm;
var _regex$exec = regex.exec(string),
_regex$exec2 = _slicedToArray(_regex$exec, 3),
match = _regex$exec2[0],
group = _regex$exec2[1],
key = _regex$exec2[2];
return {
group: group,
key: key
};
}
;