plural-rules
Version:
Evaluates plural rules, so that localization libraries can choose the right plural form.
3 lines (2 loc) • 1.57 kB
JavaScript
let supportedLocales;import r from"cldrpluralruleparser";function parsePluralForms(r){return r.split(",").reduce((r,e)=>{let l=e.split(":");return r[l[0]]=+l[1],r},{})}function indexPluralForms(r,e){return Object.keys(r).reduce((l,a)=>{let t=r[a];if("string"==typeof t){t=t.trim().replace(/ {2}/g," ");let o=e.indexOf(t);o<0&&(o=e.length,e.push(t)),t=o}return a.length>17&&(a=a.substr(17)),l[a]=t,l},{})}let rules=[],cardinals={};function normalizeLocale(r){return r.toLowerCase().replace("_","-")}function getLanguage(r){let e=r.indexOf("-");return e>0&&r.substr(0,e)}function getPluralRulesForCardinals(r){let e;let l=cardinals[r=normalizeLocale(r)];if(void 0===l&&(e=getLanguage(r))&&(l=cardinals[e]),void 0===l)throw Error(`Unrecognised locale: "${r}".`);return"string"==typeof l&&(l=parsePluralForms(l),cardinals[e||r]=l),l}function getPluralFormForCardinal(e,l){let a="string"!=typeof e?e:getPluralRulesForCardinals(e);for(let t in a){let o=a[t];if(r(rules[o],l))return t}}function setPluralFormsForCardinals(r,e){cardinals[r=normalizeLocale(r)]=indexPluralForms(e,rules)}function populatePluralData(r){rules=r.rules,cardinals=r.cardinals}function getSupportedLocales(){return supportedLocales||(supportedLocales=Object.keys(cardinals)),supportedLocales}function getPluralFormsForLocale(r){let e=cardinals[r];if(void 0!==e)return e.split(",").map(r=>r.substring(0,r.indexOf(":")))}export{getPluralFormForCardinal,getPluralFormsForLocale,getPluralRulesForCardinals,getSupportedLocales,populatePluralData,setPluralFormsForCardinals};
//# sourceMappingURL=code.mjs.map