json-autotranslate
Version:
Translate a folder of JSON files containing translations into multiple languages.
64 lines (63 loc) • 2.62 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
exports.__esModule = true;
var fs = __importStar(require("fs"));
var path = __importStar(require("path"));
var flatten = __importStar(require("flattenjs"));
exports.getAvailableLanguages = function (directory) {
return fs
.readdirSync(directory)
.map(function (d) { return path.resolve(directory, d); })
.filter(function (d) { return fs.statSync(d).isDirectory(); })
.map(function (d) { return path.basename(d); });
};
exports.detectFileType = function (json) {
var invalidKeys = Object.keys(json).filter(function (k) { return typeof json[k] === 'string' && (k.includes('.') || k.includes(' ')); });
return invalidKeys.length > 0 ? 'natural' : 'key-based';
};
exports.loadTranslations = function (directory, fileType) {
if (fileType === void 0) { fileType = 'auto'; }
return fs
.readdirSync(directory)
.filter(function (f) { return f.endsWith('.json'); })
.map(function (f) {
var json = require(path.resolve(directory, f));
var type = fileType === 'auto' ? exports.detectFileType(json) : fileType;
return {
name: f,
originalContent: json,
type: type,
content: type === 'key-based'
? flatten.convert(require(path.resolve(directory, f)))
: require(path.resolve(directory, f))
};
});
};
exports.fixSourceInconsistencies = function (directory) {
var files = exports.loadTranslations(directory).filter(function (f) { return f.type === 'natural'; });
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
var file = files_1[_i];
var fixedContent = Object.keys(file.content).reduce(function (acc, cur) {
var _a;
return (__assign({}, acc, (_a = {}, _a[cur] = cur, _a)));
}, {});
fs.writeFileSync(path.resolve(directory, file.name), JSON.stringify(fixedContent, null, 2) + '\n');
}
};