translate-maker
Version:
Lightweight translation module. Internationalize your great project.
66 lines (51 loc) • 1.89 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = plural;
var _find = _interopRequireDefault(require("lodash/find"));
var _getPlural = _interopRequireDefault(require("../utils/getPlural"));
function getValue(data, key, defaultValue) {
var items = data || [];
var option = (0, _find.default)(items, function (item) {
return item.key === key;
});
return option ? option.value : defaultValue;
}
function plural(value, part, attrs, metadata) {
var _this$getOptions = this.getOptions(),
locale = _this$getOptions.locale;
var numberValue = Number(value);
var currentPlural = (0, _getPlural.default)(locale, 'en');
var pluralValue = currentPlural(numberValue);
var offset = getValue(metadata, 'offset', 0);
var smartValue = offset ? numberValue - offset : value; // try to find exact value
var exactKey = "=" + numberValue;
var option = null;
var defaultOption = null;
for (var _len = arguments.length, args = new Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++) {
args[_key - 4] = arguments[_key];
}
var exactOption = (0, _find.default)(args, function (arg) {
if (arg.type !== 'pair') {
return false;
}
var key = typeof arg.key === 'string' ? arg.key.toLowerCase() : arg.key;
if (!key || key === 'other') {
defaultOption = arg;
} else if (key === exactKey) {
return true;
} else if (key === pluralValue) {
option = arg;
}
return undefined;
});
if (exactOption) {
return this.buildText(exactOption.value, attrs, smartValue);
} else if (option) {
return this.buildText(option.value, attrs, smartValue);
} else if (defaultOption) {
return this.buildText(defaultOption.value, attrs, smartValue);
}
return undefined;
}
//# sourceMappingURL=plural.js.map