react-gettext
Version:
Gettext implementation for React based project.
73 lines (59 loc) • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.gettext = gettext;
exports.ngettext = ngettext;
exports.xgettext = xgettext;
exports.nxgettext = nxgettext;
exports.default = void 0;
var DELIMITER = "\x04"; // End of Transmission (EOT)
function getTranslations(catalog) {
return typeof catalog === 'function' ? catalog() : catalog;
}
function getPluralForm(plural, n) {
// return 0 if n is not integer
if (Number.isNaN(parseInt(n, 10))) {
return 0;
} // if pluralForm is function, use it to get plural form index
if (typeof plural === 'function') {
return plural(n);
} // if pluralForm is string and contains only "n", "0-9", " ", "!=?:%+-/*><&|()"
// characters, then we can "eval" it to calculate plural form
if (typeof plural === 'string' && !plural.match(/[^n0-9 !=?:%+-/*><&|()]/i)) {
/* eslint-disable no-new-func */
var calcPlural = Function('n', "return ".concat(plural));
/* eslint-enable no-new-func */
return +calcPlural(n);
}
return 0;
}
function gettext(catalog, message) {
var messages = getTranslations(catalog);
return Object.prototype.hasOwnProperty.call(messages, message) ? messages[message] : message;
}
function ngettext(catalog, plurality, singular, plural, n) {
var messages = getTranslations(catalog);
var pluralIndex = getPluralForm(plurality, n);
var defaultValue = n > 1 ? plural : singular;
return Object.prototype.hasOwnProperty.call(messages, singular) && Array.isArray(messages[singular]) && messages[singular].length > pluralIndex && pluralIndex >= 0 ? messages[singular][pluralIndex] : defaultValue;
}
function xgettext(catalog, message, context) {
var messages = getTranslations(catalog);
var key = context + DELIMITER + message;
return Object.prototype.hasOwnProperty.call(messages, key) ? messages[key] : message;
}
function nxgettext(catalog, plurality, singular, plural, n, context) {
var messages = getTranslations(catalog);
var pluralIndex = getPluralForm(plurality, n);
var defaultValue = n > 1 ? plural : singular;
var key = context + DELIMITER + singular;
return Object.prototype.hasOwnProperty.call(messages, key) && Array.isArray(messages[key]) && messages[key].length > pluralIndex && pluralIndex >= 0 ? messages[key][pluralIndex] : defaultValue;
}
var _default = {
gettext: gettext,
ngettext: ngettext,
xgettext: xgettext,
nxgettext: nxgettext
};
exports.default = _default;