UNPKG

locize-xcstrings

Version:

xcstrings2locize and locize2xcstrings converter xcstrings utils

117 lines (116 loc) 4.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = locize2xcstrings; var keyMetaRegex = /\[(.*?)\]$/; var getAllKeys = function getAllKeys(res, lngs) { var keys = []; lngs.forEach(function (l) { var ks = Object.keys(res[l]); ks.forEach(function (k) { if (keys.indexOf(k) < 0) { keys.push(k); } }); }); return keys.sort().sort(function (a, b) { var aMatch = a.match(keyMetaRegex); var bMatch = b.match(keyMetaRegex); var aTest = a; var bTest = b; if (aMatch) aTest = a.substring(0, aMatch.index); if (bMatch) bTest = b.substring(0, bMatch.index); if (aTest === bTest) return 0; return aTest > bTest ? 1 : -1; }); }; function locize2xcstrings(data) { var result = { sourceLanguage: data.sourceLng || Object.keys(data.resources || {})[0], strings: {}, version: data.version || '1.0' }; var lngs = Object.keys(data.resources).sort(); var keys = getAllKeys(data.resources, lngs); lngs.forEach(function (l) { keys.forEach(function (k) { var _result$strings, _key, _data$resources$resul; var regRes = k.match(keyMetaRegex); var key; var keyMeta; var subKey; var subKeyMeta; if (!regRes) { key = k; } else { key = k.substring(0, regRes.index); keyMeta = regRes[1]; var subRegRes = keyMeta.match(keyMetaRegex); if (subRegRes) { subKey = keyMeta.substring(0, subRegRes.index); subKeyMeta = subRegRes[1]; } } (_result$strings = result.strings)[_key = key] || (_result$strings[_key] = {}); if (!result.strings[key].comment && (_data$resources$resul = data.resources[result.sourceLanguage]) !== null && _data$resources$resul !== void 0 && (_data$resources$resul = _data$resources$resul[k]) !== null && _data$resources$resul !== void 0 && (_data$resources$resul = _data$resources$resul.context) !== null && _data$resources$resul !== void 0 && _data$resources$resul.text) { var _data$resources$resul2; result.strings[key].comment = (_data$resources$resul2 = data.resources[result.sourceLanguage][k]) === null || _data$resources$resul2 === void 0 || (_data$resources$resul2 = _data$resources$resul2.context) === null || _data$resources$resul2 === void 0 ? void 0 : _data$resources$resul2.text; } if (data.resources[l][k] === undefined || data.resources[l][k] === null) return; if (typeof data.resources[l][k] === 'string') { data.resources[l][k] = { value: data.resources[l][k] }; } if (!keyMeta && data.resources[l][k].value !== undefined) { var _result$strings$key, _result$strings$key$l; (_result$strings$key = result.strings[key]).localizations || (_result$strings$key.localizations = {}); (_result$strings$key$l = result.strings[key].localizations)[l] || (_result$strings$key$l[l] = {}); result.strings[key].localizations[l].stringUnit = { state: 'translated', value: data.resources[l][k].value }; } else if (keyMeta) { var _result$strings$key2, _result$strings$key$l2; (_result$strings$key2 = result.strings[key]).localizations || (_result$strings$key2.localizations = {}); (_result$strings$key$l2 = result.strings[key].localizations)[l] || (_result$strings$key$l2[l] = {}); if (!subKeyMeta) { var splitted = keyMeta.split('.'); splitted.reduce(function (r, s) { r[s] || (r[s] = {}); if (s === splitted[splitted.length - 1]) { r[s].stringUnit = { state: 'translated', value: data.resources[l][k].value }; } return r[s]; }, result.strings[key].localizations[l]); } else { var _splitted = subKey.split('.'); _splitted.reduce(function (r, s) { r[s] || (r[s] = {}); if (s === _splitted[_splitted.length - 1]) { var _splitted2 = subKeyMeta.split('.'); _splitted2.reduce(function (r, s) { r[s] || (r[s] = {}); if (s === _splitted2[_splitted2.length - 1]) { r[s].stringUnit = { state: 'translated', value: data.resources[l][k].value }; } return r[s]; }, r[s]); } return r[s]; }, result.strings[key].localizations[l]); } } }); }); var str = JSON.stringify(result, null, 2); return str.replace(/"\s*:\s*/g, '" : ').replace(/:\s*{},\s*/g, ': {\n\n },\n '); } module.exports = exports.default;