messageformat
Version:
PluralFormat and SelectFormat Message and i18n Tool - A JavaScript Implemenation of the ICU standards.
64 lines (51 loc) • 1.58 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getPlural = getPlural;
exports.getAllPlurals = getAllPlurals;
var _pluralCategories = _interopRequireDefault(require("make-plural/umd/pluralCategories"));
var _plurals = _interopRequireDefault(require("make-plural/umd/plurals"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @class
* @private
* @hideconstructor
* @classdesc Utility getter/wrapper for pluralization functions from
* {@link http://github.com/eemeli/make-plural.js make-plural}
*/
function wrapPluralFunc(lc, pf, pluralKeyChecks) {
var fn = function () {
return pf.apply(this, arguments);
};
fn.toString = () => pf.toString();
if (pluralKeyChecks) {
const pc = _pluralCategories.default[lc] || {};
fn.cardinal = pc.cardinal;
fn.ordinal = pc.ordinal;
} else {
fn.cardinal = [];
fn.ordinal = [];
}
return fn;
}
function getPlural(locale, {
pluralKeyChecks
}) {
for (let lc = String(locale); lc; lc = lc.replace(/[-_]?[^-_]*$/, '')) {
const pf = _plurals.default[lc];
if (pf) return wrapPluralFunc(lc, pf, pluralKeyChecks);
}
throw new Error('Localisation function not found for locale ' + JSON.stringify(locale));
}
function getAllPlurals({
pluralKeyChecks
}) {
const locales = {};
const keys = Object.keys(_plurals.default);
for (let i = 0; i < keys.length; ++i) {
const lc = keys[i];
locales[lc] = wrapPluralFunc(lc, _plurals.default[lc], pluralKeyChecks);
}
return locales;
}
;