yavsc/web/Scripts/globalize/plural.js

360 lines
12 KiB
JavaScript

Fixes bill editon * AppAdmin.master: A new master page for Administration * Web.config: * Web.csproj: * Book.aspx: * Auth.aspx: * Auth.aspx: * Book.aspx: * Auth.aspx: * TagPanel.ascx: * YavscModel.csproj: * Restore.aspx: * Book.aspx: * Restored.aspx: * date.js: * RoleList.aspx: * UserList.aspx: * LocalizedText.resx: * number.js: * FreeDate.cs: * plural.js: * message.js: * BookQuery.cs: * LocalizedText.fr.resx: * ChooseADate.aspx: * currency.js: * ChooseADate.aspx: * ErrorMessage.aspx: * globalize.js: * ChooseADate.aspx: * ChooseCalendar.aspx: * LocalizedText.Designer.cs: * ChooseCalendar.aspx: * ErrorMessage.aspx: * relative-time.js: * ChooseCalendar.aspx: * LocalizedText.fr.Designer.cs: * OtherWebException.aspx: * globalize.cultures.js: * globalize.culture.he.js: * globalize.culture.ru.js: * globalize.culture.ha.js: * globalize.culture.rw.js: * globalize.culture.gu.js: * globalize.culture.sa.js: * globalize.culture.gl.js: * globalize.culture.hi.js: * globalize.culture.pt.js: * globalize.culture.id.js: * globalize.culture.hy.js: * globalize.culture.hu.js: * globalize.culture.rm.js: * globalize.culture.hr.js: * globalize.culture.ro.js: * globalize.culture.gd.js: * globalize.culture.fi.js: * globalize.culture.fa.js: * globalize.culture.eu.js: * globalize.culture.et.js: * globalize.culture.es.js: * globalize.culture.sq.js: * globalize.culture.sr.js: * globalize.culture.sl.js: * globalize.culture.ga.js: * globalize.culture.fy.js: * globalize.culture.fr.js: * globalize.culture.se.js: * globalize.culture.si.js: * globalize.culture.sk.js: * globalize.culture.fo.js: * globalize.culture.ig.js: * globalize.culture.ml.js: * globalize.culture.mt.js: * globalize.culture.nl.js: * globalize.culture.ms.js: * globalize.culture.ky.js: * globalize.culture.mn.js: * globalize.culture.nn.js: * globalize.culture.mk.js: * globalize.culture.ne.js: * globalize.culture.lt.js: * globalize.culture.lv.js: * globalize.culture.lo.js: * globalize.culture.mi.js: * globalize.culture.lb.js: * globalize.culture.nb.js: * globalize.culture.ko.js: * globalize.culture.iu.js: * globalize.culture.pa.js: * globalize.culture.pl.js: * globalize.culture.it.js: * globalize.culture.ps.js: * globalize.culture.is.js: * globalize.culture.ii.js: * globalize.culture.ja.js: * globalize.culture.no.js: * globalize.culture.kn.js: * globalize.culture.km.js: * globalize.culture.kl.js: * globalize.culture.oc.js: * globalize.culture.kk.js: * globalize.culture.ka.js: * globalize.culture.or.js: * globalize.culture.sv.js: * globalize.culture.xh.js: * globalize.culture.dv.js: * globalize.culture.yo.js: * globalize.culture.de.js: * globalize.culture.da.js: * globalize.culture.zh.js: * globalize.culture.cy.js: * globalize.culture.el.js: * globalize.culture.tt.js: * globalize.culture.ug.js: * globalize.culture.uk.js: * globalize.culture.ur.js: * globalize.culture.uz.js: * globalize.culture.vi.js: * globalize.culture.wo.js: * globalize.culture.cs.js: * globalize.culture.be.js: * globalize.culture.ba.js: * globalize.culture.az.js: * globalize.culture.as.js: * globalize.culture.ar.js: * globalize.culture.am.js: * globalize.culture.af.js: * globalize.culture.bg.js: * globalize.culture.zu.js: * globalize.culture.co.js: * globalize.culture.ca.js: * globalize.culture.bs.js: * globalize.culture.br.js: * globalize.culture.bo.js: * globalize.culture.bn.js: * globalize.culture.mr.js: * globalize.culture.tn.js: * globalize.culture.sw.js: * globalize.culture.tg.js: * globalize.culture.ta.js: * globalize.culture.tr.js: * globalize.culture.te.js: * globalize.culture.th.js: * globalize.culture.tk.js: * globalize.culture.dsb.js: * globalize.culture.prs.js: * globalize.culture.quz.js: * globalize.culture.kok.js: * globalize.culture.smn.js: * globalize.culture.qut.js: * globalize.culture.sms.js: * globalize.culture.sma.js: * globalize.culture.sah.js: * globalize.culture.gsw.js: * globalize.culture.moh.js: * globalize.culture.tzm.js: * globalize.culture.nso.js: * globalize.culture.arn.js: * globalize.culture.hsb.js: * globalize.culture.syr.js: * globalize.culture.fil.js: * globalize.culture.smj.js: * globalize.culture.oc-FR.js: * globalize.culture.th-TH.js: * globalize.culture.zu-ZA.js: * globalize.culture.nn-NO.js: * globalize.culture.sw-KE.js: * globalize.culture.mt-MT.js: * globalize.culture.sv-FI.js: * globalize.culture.ms-MY.js: * globalize.culture.sv-SE.js: * globalize.culture.ms-BN.js: * globalize.culture.nb-NO.js: * globalize.culture.te-IN.js: * globalize.culture.nl-NL.js: * globalize.culture.nl-BE.js: * globalize.culture.ta-IN.js: * globalize.culture.ne-NP.js: * globalize.culture.sq-AL.js: * globalize.culture.sl-SI.js: * globalize.culture.ro-RO.js: * globalize.culture.se-NO.js: * globalize.culture.vi-VN.js: * globalize.culture.rm-CH.js: * globalize.culture.wo-SN.js: * globalize.culture.se-SE.js: * globalize.culture.xh-ZA.js: * globalize.culture.tr-TR.js: * globalize.culture.sa-IN.js: * globalize.culture.ug-CN.js: * globalize.culture.rw-RW.js: * globalize.culture.uk-UA.js: * globalize.culture.se-FI.js: * globalize.culture.ru-RU.js: * globalize.culture.ur-PK.js: * globalize.culture.tn-ZA.js: * globalize.culture.zh-CN.js: * globalize.culture.pa-IN.js: * globalize.culture.tt-RU.js: * globalize.culture.zh-MO.js: * globalize.culture.zh-SG.js: * globalize.culture.or-IN.js: * globalize.culture.zh-TW.js: * globalize.culture.sk-SK.js: * globalize.culture.pt-PT.js: * globalize.culture.pt-BR.js: * globalize.culture.si-LK.js: * globalize.culture.yo-NG.js: * globalize.culture.ps-AF.js: * globalize.culture.tk-TM.js: * globalize.culture.pl-PL.js: * globalize.culture.zh-HK.js: * globalize.culture.en-NZ.js: * globalize.culture.en-PH.js: * globalize.culture.en-SG.js: * globalize.culture.en-TT.js: * globalize.culture.en-US.js: * globalize.culture.en-ZA.js: * globalize.culture.en-ZW.js: * globalize.culture.es-AR.js: * globalize.culture.en-MY.js: * globalize.culture.el-GR.js: * globalize.culture.en-AU.js: * globalize.culture.en-BZ.js: * globalize.culture.en-CA.js: * globalize.culture.en-GB.js: * globalize.culture.en-IE.js: * globalize.culture.en-IN.js: * globalize.culture.en-JM.js: * globalize.culture.es-BO.js: * globalize.culture.es-NI.js: * globalize.culture.es-PA.js: * globalize.culture.es-PE.js: * globalize.culture.es-PR.js: * globalize.culture.es-PY.js: * globalize.culture.es-SV.js: * globalize.culture.es-US.js: * globalize.culture.es-UY.js: * globalize.culture.es-MX.js: * globalize.culture.es-CL.js: * globalize.culture.es-CO.js: * globalize.culture.es-CR.js: * globalize.culture.es-DO.js: * globalize.culture.es-EC.js: * globalize.culture.es-ES.js: * globalize.culture.es-GT.js: * globalize.culture.es-HN.js: * globalize.culture.dv-MV.js: * globalize.culture.ar-LY.js: * globalize.culture.ar-MA.js: * globalize.culture.ar-OM.js: * globalize.culture.ar-QA.js: * globalize.culture.ar-SA.js: * globalize.culture.ar-SY.js: * globalize.culture.ar-TN.js: * globalize.culture.ar-YE.js: * globalize.culture.ar-LB.js: * globalize.culture.am-ET.js: * globalize.culture.ar-AE.js: * globalize.culture.ar-BH.js: * globalize.culture.ar-DZ.js: * globalize.culture.ar-EG.js: * globalize.culture.ar-IQ.js: * globalize.culture.ar-JO.js: * globalize.culture.ar-KW.js: * globalize.culture.as-IN.js: * globalize.culture.cs-CZ.js: * globalize.culture.cy-GB.js: * globalize.culture.da-DK.js: * globalize.culture.de-AT.js: * globalize.culture.de-CH.js: * globalize.culture.de-DE.js: * globalize.culture.de-LI.js: * globalize.culture.de-LU.js: * globalize.culture.co-FR.js: * globalize.culture.ba-RU.js: * globalize.culture.be-BY.js: * globalize.culture.bg-BG.js: * globalize.culture.bn-BD.js: * globalize.culture.bn-IN.js: * globalize.culture.bo-CN.js: * globalize.culture.br-FR.js: * globalize.culture.ca-ES.js: * globalize.culture.es-VE.js: * globalize.culture.hy-AM.js: * globalize.culture.id-ID.js: * globalize.culture.ig-NG.js: * globalize.culture.ii-CN.js: * globalize.culture.is-IS.js: * globalize.culture.it-CH.js: * globalize.culture.it-IT.js: * globalize.culture.hu-HU.js: * globalize.culture.gd-GB.js: * globalize.culture.gl-ES.js: * globalize.culture.gu-IN.js: * globalize.culture.he-IL.js: * globalize.culture.hi-IN.js: * globalize.culture.hr-BA.js: * globalize.culture.hr-HR.js: * globalize.culture.ja-JP.js: * globalize.culture.lt-LT.js: * globalize.culture.af-ZA.js: * globalize.culture.mi-NZ.js: * globalize.culture.mk-MK.js: * globalize.culture.ml-IN.js: * globalize.culture.mn-MN.js: * globalize.culture.mr-IN.js: * globalize.culture.lo-LA.js: * globalize.culture.ka-GE.js: * globalize.culture.kk-KZ.js: * globalize.culture.kl-GL.js: * globalize.culture.km-KH.js: * globalize.culture.kn-IN.js: * globalize.culture.ko-KR.js: * globalize.culture.ky-KG.js: * globalize.culture.lb-LU.js: * globalize.culture.ga-IE.js: * globalize.culture.fr-CH.js: * globalize.culture.fr-CA.js: * globalize.culture.fr-BE.js: * globalize.culture.fo-FO.js: * globalize.culture.lv-LV.js: * globalize.culture.fi-FI.js: * globalize.culture.fa-IR.js: * globalize.culture.eu-ES.js: * globalize.culture.et-EE.js: * globalize.culture.fr-FR.js: * globalize.culture.fy-NL.js: * globalize.culture.fr-LU.js: * globalize.culture.fr-MC.js: * globalize.culture.sma-SE.js: * globalize.culture.sma-NO.js: * globalize.culture.arn-CL.js: * globalize.culture.qut-GT.js: * globalize.culture.gsw-FR.js: * globalize.culture.fil-PH.js: * globalize.culture.smj-SE.js: * globalize.culture.smn-FI.js: * globalize.culture.sah-RU.js: * globalize.culture.sms-FI.js: * globalize.culture.prs-AF.js: * globalize.culture.syr-SY.js: * globalize.culture.smj-NO.js: * globalize.culture.zh-CHT.js: * globalize.culture.kok-IN.js: * globalize.culture.hsb-DE.js: * globalize.culture.moh-CA.js: * globalize.culture.nso-ZA.js: * globalize.culture.quz-PE.js: * globalize.culture.zh-CHS.js: * globalize.culture.dsb-DE.js: * globalize.culture.quz-BO.js: * globalize.culture.quz-EC.js: * globalize.culture.en-029.js: * globalize.culture.mn-Mong.js: * globalize.culture.mn-Cyrl.js: * globalize.culture.sr-Cyrl.js: * globalize.culture.az-Latn.js: * globalize.culture.az-Cyrl.js: * globalize.culture.sr-Latn.js: * globalize.culture.iu-Latn.js: * globalize.culture.zh-Hant.js: * globalize.culture.zh-Hans.js: * globalize.culture.tg-Cyrl.js: * globalize.culture.uz-Latn.js: * globalize.culture.uz-Cyrl.js: * globalize.culture.ha-Latn.js: * globalize.culture.iu-Cans.js: * globalize.culture.bs-Cyrl.js: * globalize.culture.bs-Latn.js: * globalize.culture.tzm-Latn.js: * globalize.culture.sr-Cyrl-ME.js: * globalize.culture.sr-Cyrl-CS.js: * globalize.culture.bs-Cyrl-BA.js: * globalize.culture.sr-Cyrl-RS.js: * globalize.culture.sr-Cyrl-BA.js: * globalize.culture.mn-Mong-CN.js: * globalize.culture.uz-Cyrl-UZ.js: * globalize.culture.ha-Latn-NG.js: * globalize.culture.iu-Latn-CA.js: * globalize.culture.uz-Latn-UZ.js: * globalize.culture.az-Latn-AZ.js: * globalize.culture.az-Cyrl-AZ.js: * globalize.culture.bs-Latn-BA.js: * globalize.culture.tg-Cyrl-TJ.js: * globalize.culture.iu-Cans-CA.js: * globalize.culture.sr-Latn-RS.js: * globalize.culture.sr-Latn-ME.js: * globalize.culture.sr-Latn-CS.js: * globalize.culture.sr-Latn-BA.js: * globalize.culture.tzm-Latn-DZ.js: * style.css: list in the nav are in line by default. * AdminController.cs: refactoring * App.master: Restores hallo editing by solving again jQuery-ui ref * Login.aspx: Prettier code at building Urls * Admin.aspx: * Index.aspx: * AddRole.aspx: * Backups.aspx: * RemoveUser.aspx: * RemoveRole..aspx: * CreateBackup.aspx: * BackupCreated.aspx: new master page
9 years ago
/**
* Globalize v1.0.0
*
* http://github.com/jquery/globalize
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2015-04-23T12:02Z
*/
/*!
* Globalize v1.0.0 2015-04-23T12:02Z Released under the MIT license
* http://git.io/TrdQbw
*/
(function( root, factory ) {
// UMD returnExports
if ( typeof define === "function" && define.amd ) {
// AMD
define([
"cldr",
"../globalize",
"cldr/event",
"cldr/supplemental"
], factory );
} else if ( typeof exports === "object" ) {
// Node, CommonJS
module.exports = factory( require( "cldrjs" ), require( "globalize" ) );
} else {
// Global
factory( root.Cldr, root.Globalize );
}
}(this, function( Cldr, Globalize ) {
var validateCldr = Globalize._validateCldr,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterType = Globalize._validateParameterType,
validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;
var MakePlural;
/* jshint ignore:start */
MakePlural = (function() {
var _toArray = function (arr) { return Array.isArray(arr) ? arr : Array.from(arr); };
var _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };
var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
/**
* make-plural.js -- https://github.com/eemeli/make-plural.js/
* Copyright (c) 2014-2015 by Eemeli Aro <eemeli@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* The software is provided "as is" and the author disclaims all warranties
* with regard to this software including all implied warranties of
* merchantability and fitness. In no event shall the author be liable for
* any special, direct, indirect, or consequential damages or any damages
* whatsoever resulting from loss of use, data or profits, whether in an
* action of contract, negligence or other tortious action, arising out of
* or in connection with the use or performance of this software.
*/
var Parser = (function () {
function Parser() {
_classCallCheck(this, Parser);
}
_createClass(Parser, [{
key: 'parse',
value: function parse(cond) {
var _this = this;
if (cond === 'i = 0 or n = 1') {
return 'n >= 0 && n <= 1';
}if (cond === 'i = 0,1') {
return 'n >= 0 && n < 2';
}if (cond === 'i = 1 and v = 0') {
this.v0 = 1;
return 'n == 1 && v0';
}
return cond.replace(/([tv]) (!?)= 0/g, function (m, sym, noteq) {
var sn = sym + '0';
_this[sn] = 1;
return noteq ? '!' + sn : sn;
}).replace(/\b[fintv]\b/g, function (m) {
_this[m] = 1;
return m;
}).replace(/([fin]) % (10+)/g, function (m, sym, num) {
var sn = sym + num;
_this[sn] = 1;
return sn;
}).replace(/n10+ = 0/g, 't0 && $&').replace(/(\w+ (!?)= )([0-9.]+,[0-9.,]+)/g, function (m, se, noteq, x) {
if (m === 'n = 0,1') return '(n == 0 || n == 1)';
if (noteq) return se + x.split(',').join(' && ' + se);
return '(' + se + x.split(',').join(' || ' + se) + ')';
}).replace(/(\w+) (!?)= ([0-9]+)\.\.([0-9]+)/g, function (m, sym, noteq, x0, x1) {
if (Number(x0) + 1 === Number(x1)) {
if (noteq) return '' + sym + ' != ' + x0 + ' && ' + sym + ' != ' + x1;
return '(' + sym + ' == ' + x0 + ' || ' + sym + ' == ' + x1 + ')';
}
if (noteq) return '(' + sym + ' < ' + x0 + ' || ' + sym + ' > ' + x1 + ')';
if (sym === 'n') {
_this.t0 = 1;return '(t0 && n >= ' + x0 + ' && n <= ' + x1 + ')';
}
return '(' + sym + ' >= ' + x0 + ' && ' + sym + ' <= ' + x1 + ')';
}).replace(/ and /g, ' && ').replace(/ or /g, ' || ').replace(/ = /g, ' == ');
}
}, {
key: 'vars',
value: (function (_vars) {
function vars() {
return _vars.apply(this, arguments);
}
vars.toString = function () {
return _vars.toString();
};
return vars;
})(function () {
var vars = [];
if (this.i) vars.push('i = s[0]');
if (this.f || this.v) vars.push('f = s[1] || \'\'');
if (this.t) vars.push('t = (s[1] || \'\').replace(/0+$/, \'\')');
if (this.v) vars.push('v = f.length');
if (this.v0) vars.push('v0 = !s[1]');
if (this.t0 || this.n10 || this.n100) vars.push('t0 = Number(s[0]) == n');
for (var k in this) {
if (/^.10+$/.test(k)) {
var k0 = k[0] === 'n' ? 't0 && s[0]' : k[0];
vars.push('' + k + ' = ' + k0 + '.slice(-' + k.substr(2).length + ')');
}
}if (!vars.length) return '';
return 'var ' + ['s = String(n).split(\'.\')'].concat(vars).join(', ');
})
}]);
return Parser;
})();
var MakePlural = (function () {
function MakePlural(lc) {
var _ref = arguments[1] === undefined ? MakePlural : arguments[1];
var cardinals = _ref.cardinals;
var ordinals = _ref.ordinals;
_classCallCheck(this, MakePlural);
if (!cardinals && !ordinals) throw new Error('At least one type of plural is required');
this.lc = lc;
this.categories = { cardinal: [], ordinal: [] };
this.parser = new Parser();
this.fn = this.buildFunction(cardinals, ordinals);
this.fn._obj = this;
this.fn.categories = this.categories;
this.fn.toString = this.fnToString.bind(this);
return this.fn;
}
_createClass(MakePlural, [{
key: 'compile',
value: function compile(type, req) {
var cases = [];
var rules = MakePlural.rules[type][this.lc];
if (!rules) {
if (req) throw new Error('Locale "' + this.lc + '" ' + type + ' rules not found');
this.categories[type] = ['other'];
return '\'other\'';
}
for (var r in rules) {
var _rules$r$trim$split = rules[r].trim().split(/\s*@\w*/);
var _rules$r$trim$split2 = _toArray(_rules$r$trim$split);
var cond = _rules$r$trim$split2[0];
var examples = _rules$r$trim$split2.slice(1);
var cat = r.replace('pluralRule-count-', '');
if (cond) cases.push([this.parser.parse(cond), cat]);
}
this.categories[type] = cases.map(function (c) {
return c[1];
}).concat('other');
if (cases.length === 1) {
return '(' + cases[0][0] + ') ? \'' + cases[0][1] + '\' : \'other\'';
} else {
return [].concat(_toConsumableArray(cases.map(function (c) {
return '(' + c[0] + ') ? \'' + c[1] + '\'';
})), ['\'other\'']).join('\n : ');
}
}
}, {
key: 'buildFunction',
value: function buildFunction(cardinals, ordinals) {
var _this3 = this;
var compile = function compile(c) {
return c ? (c[1] ? 'return ' : 'if (ord) return ') + _this3.compile.apply(_this3, _toConsumableArray(c)) : '';
},
fold = { vars: function vars(str) {
return (' ' + str + ';').replace(/(.{1,78})(,|$) ?/g, '$1$2\n ');
},
cond: function cond(str) {
return (' ' + str + ';').replace(/(.{1,78}) (\|\| |$) ?/gm, '$1\n $2');
} },
cond = [ordinals && ['ordinal', !cardinals], cardinals && ['cardinal', true]].map(compile).map(fold.cond),
body = [fold.vars(this.parser.vars())].concat(_toConsumableArray(cond)).join('\n').replace(/\s+$/gm, '').replace(/^[\s;]*[\r\n]+/gm, ''),
args = ordinals && cardinals ? 'n, ord' : 'n';
return new Function(args, body);
}
}, {
key: 'fnToString',
value: function fnToString(name) {
return Function.prototype.toString.call(this.fn).replace(/^function( \w+)?/, name ? 'function ' + name : 'function').replace('\n/**/', '');
}
}], [{
key: 'load',
value: function load() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
args.forEach(function (cldr) {
var data = cldr && cldr.supplemental || null;
if (!data) throw new Error('Data does not appear to be CLDR data');
MakePlural.rules = {
cardinal: data['plurals-type-cardinal'] || MakePlural.rules.cardinal,
ordinal: data['plurals-type-ordinal'] || MakePlural.rules.ordinal
};
});
return MakePlural;
}
}]);
return MakePlural;
})();
MakePlural.cardinals = true;
MakePlural.ordinals = false;
MakePlural.rules = { cardinal: {}, ordinal: {} };
return MakePlural;
}());
/* jshint ignore:end */
var validateParameterTypeNumber = function( value, name ) {
validateParameterType(
value,
name,
value === undefined || typeof value === "number",
"Number"
);
};
var validateParameterTypePluralType = function( value, name ) {
validateParameterType(
value,
name,
value === undefined || value === "cardinal" || value === "ordinal",
"String \"cardinal\" or \"ordinal\""
);
};
/**
* .plural( value )
*
* @value [Number]
*
* Return the corresponding form (zero | one | two | few | many | other) of a
* value given locale.
*/
Globalize.plural =
Globalize.prototype.plural = function( value, options ) {
validateParameterPresence( value, "value" );
validateParameterTypeNumber( value, "value" );
return this.pluralGenerator( options )( value );
};
/**
* .pluralGenerator( [options] )
*
* Return a plural function (of the form below).
*
* fn( value )
*
* @value [Number]
*
* Return the corresponding form (zero | one | two | few | many | other) of a value given the
* default/instance locale.
*/
Globalize.pluralGenerator =
Globalize.prototype.pluralGenerator = function( options ) {
var cldr, isOrdinal, plural, type;
validateParameterTypePlainObject( options, "options" );
options = options || {};
type = options.type || "cardinal";
cldr = this.cldr;
validateParameterTypePluralType( options.type, "options.type" );
validateDefaultLocale( cldr );
isOrdinal = type === "ordinal";
cldr.on( "get", validateCldr );
cldr.supplemental([ "plurals-type-" + type, "{language}" ]);
cldr.off( "get", validateCldr );
MakePlural.rules = {};
MakePlural.rules[ type ] = cldr.supplemental( "plurals-type-" + type );
plural = new MakePlural( cldr.attributes.language, {
"ordinals": isOrdinal,
"cardinals": !isOrdinal
});
return function( value ) {
validateParameterPresence( value, "value" );
validateParameterTypeNumber( value, "value" );
return plural( value );
};
};
return Globalize;
}));