elliptical-translate
Version:
Multiple locale support for elliptical phrases
54 lines (43 loc) • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createProcess;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _locale = require('locale');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function normalizeLocale(locale) {
return locale.toLowerCase().replace('_', '-');
}
function getCall(translations, desired) {
var availableStrings = _lodash2.default.chain(translations).map(function (obj) {
return obj.langs || [obj.lang];
}).concat().value();
var available = new _locale.Locales(availableStrings);
var best = desired.best(available);
// if we got one
if (!best.defaulted) {
return _lodash2.default.find(translations, function (obj) {
var langs = obj.lang ? [obj.lang] : obj.langs;
var normLangs = _lodash2.default.map(langs, function (lang) {
return normalizeLocale(lang);
});
return _lodash2.default.includes(normLangs, normalizeLocale(best.normalized));
}).describe;
}
}
function createProcess(desiredStrings) {
var desired = new _locale.Locales(desiredStrings, 'default');
return function process(element) {
if (element.type.translations) {
var describe = getCall(element.type.translations, desired);
if (describe) {
var newType = _lodash2.default.assign({}, element.type, { describe: describe });
delete newType.translations;
return _lodash2.default.assign({}, element, { type: newType });
}
}
return element;
};
}