UNPKG

json-autotranslate

Version:

Translate a folder of JSON files containing translations into multiple languages.

64 lines (63 loc) 2.62 kB
"use strict"; 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'); } };