locize-xcstrings
Version:
xcstrings2locize and locize2xcstrings converter xcstrings utils
117 lines (116 loc) • 4.76 kB
JavaScript
;
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;