UNPKG

google-closure-library

Version:
1,154 lines (1,101 loc) 37.3 kB
/** * @license * Copyright The Closure Library Authors. * SPDX-License-Identifier: Apache-2.0 */ /** * @fileoverview Plural rules. * * * File generated from CLDR ver. 43 */ // clang-format off goog.provide('goog.i18n.pluralRules'); goog.require('goog.i18n.LocaleFeature'); /** * Plural pattern keyword * @enum {string} */ goog.i18n.pluralRules.Keyword = { ZERO: 'zero', ONE: 'one', TWO: 'two', FEW: 'few', MANY: 'many', OTHER: 'other' }; /** * Plural selection function. * * The actual implementation is locale-dependent. * * @param {number} n The count of items. * @param {number=} precision optional, precision. * @return {!goog.i18n.pluralRules.Keyword} */ goog.i18n.pluralRules.select; /** * Default Plural select rule. * @param {number} n The count of items. * @param {number=} precision optional, precision. * @return {!goog.i18n.pluralRules.Keyword} Default value. * @private */ goog.i18n.pluralRules.defaultSelect_ = function(n, precision) { "use strict"; return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Returns the fractional part of a number (3.1416 => 1416) * @param {number} n The count of items. * @return {number} The fractional part. * @private */ goog.i18n.pluralRules.decimals_ = function(n) { "use strict"; const str = n + ''; const result = str.indexOf('.'); return (result === -1) ? 0 : str.length - result - 1; }; /** * Calculates v and f as per CLDR plural rules. * The short names for parameters / return match the CLDR syntax and UTS #35 * (https://unicode.org/reports/tr35/tr35-numbers.html#Plural_rules_syntax) * @param {number} n The count of items. * @param {number=} precision optional, precision. * @return {{v:number, f:number}} The v and f. * @private */ goog.i18n.pluralRules.get_vf_ = function(n, precision) { "use strict"; const DEFAULT_DIGITS = 3; let v; if (undefined === precision) { v = Math.min(goog.i18n.pluralRules.decimals_(n), DEFAULT_DIGITS); } else { v = precision; } const base = Math.pow(10, v); const f = ((n * base) | 0) % base; return {v: v, f: f}; }; /** * Calculates w and t as per CLDR plural rules. * The short names for parameters / return match the CLDR syntax and UTS #35 * (https://unicode.org/reports/tr35/tr35-numbers.html#Plural_rules_syntax) * @param {number} v Calculated previously. * @param {number} f Calculated previously. * @return {{w:number, t:number}} The w and t. * @private */ goog.i18n.pluralRules.get_wt_ = function(v, f) { "use strict"; if (f === 0) { return {w: 0, t: 0}; } while ((f % 10) === 0) { f /= 10; v--; } return {w: v, t: f}; }; /** * Calculates exponent as per CLDR plural rules. * The short names for parameters / return match the CLDR syntax and UTS #35 * (https://unicode.org/reports/tr35/tr35-numbers.html#Plural_rules_syntax) * @param {number} n The count of items. * @return {number} The e (exponent) * @private */ goog.i18n.pluralRules.get_e_ = function(n) { "use strict"; return 0; }; /** * Plural select rules for fil locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.filSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for he locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.heSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i == 1 && vf.v == 0 || i == 0 && vf.v != 0) { return goog.i18n.pluralRules.Keyword.ONE; } if (i == 2 && vf.v == 0) { return goog.i18n.pluralRules.Keyword.TWO; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for br locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.brSelect_ = function(n, precision) { "use strict"; if (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) { return goog.i18n.pluralRules.Keyword.ONE; } if (n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) { return goog.i18n.pluralRules.Keyword.TWO; } if ((n % 10 >= 3 && n % 10 <= 4 || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) { return goog.i18n.pluralRules.Keyword.FEW; } if (n != 0 && n % 1000000 == 0) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for sr locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.srSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return goog.i18n.pluralRules.Keyword.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) { return goog.i18n.pluralRules.Keyword.FEW; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for ro locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.roSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i == 1 && vf.v == 0) { return goog.i18n.pluralRules.Keyword.ONE; } if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) { return goog.i18n.pluralRules.Keyword.FEW; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for hi locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.hiSelect_ = function(n, precision) { "use strict"; const i = n | 0; if (i == 0 || n == 1) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for es locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.esSelect_ = function(n, precision) { "use strict"; const i = n | 0; const e = goog.i18n.pluralRules.get_e_(n); const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (n == 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (e == 0 && i != 0 && i % 1000000 == 0 && vf.v == 0 || (e < 0 || e > 5)) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for hy locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.hySelect_ = function(n, precision) { "use strict"; const i = n | 0; if (i == 0 || i == 1) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for pt locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.ptSelect_ = function(n, precision) { "use strict"; const i = n | 0; const e = goog.i18n.pluralRules.get_e_(n); const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i >= 0 && i <= 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (e == 0 && i != 0 && i % 1000000 == 0 && vf.v == 0 || (e < 0 || e > 5)) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for is locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.isSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); const wt = goog.i18n.pluralRules.get_wt_(vf.v, vf.f); if (wt.t == 0 && i % 10 == 1 && i % 100 != 11 || wt.t % 10 == 1 && wt.t % 100 != 11) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for cs locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.csSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i == 1 && vf.v == 0) { return goog.i18n.pluralRules.Keyword.ONE; } if (i >= 2 && i <= 4 && vf.v == 0) { return goog.i18n.pluralRules.Keyword.FEW; } if (vf.v != 0) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for pl locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.plSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i == 1 && vf.v == 0) { return goog.i18n.pluralRules.Keyword.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return goog.i18n.pluralRules.Keyword.FEW; } if (vf.v == 0 && i != 1 && i % 10 >= 0 && i % 10 <= 1 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 12 && i % 100 <= 14) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for ca locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.caSelect_ = function(n, precision) { "use strict"; const i = n | 0; const e = goog.i18n.pluralRules.get_e_(n); const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i == 1 && vf.v == 0) { return goog.i18n.pluralRules.Keyword.ONE; } if (e == 0 && i != 0 && i % 1000000 == 0 && vf.v == 0 || (e < 0 || e > 5)) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for lv locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.lvSelect_ = function(n, precision) { "use strict"; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19 || vf.v == 2 && vf.f % 100 >= 11 && vf.f % 100 <= 19) { return goog.i18n.pluralRules.Keyword.ZERO; } if (n % 10 == 1 && n % 100 != 11 || vf.v == 2 && vf.f % 10 == 1 && vf.f % 100 != 11 || vf.v != 2 && vf.f % 10 == 1) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for si locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.siSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if ((n == 0 || n == 1) || i == 0 && vf.f == 1) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for cy locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.cySelect_ = function(n, precision) { "use strict"; if (n == 0) { return goog.i18n.pluralRules.Keyword.ZERO; } if (n == 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (n == 2) { return goog.i18n.pluralRules.Keyword.TWO; } if (n == 3) { return goog.i18n.pluralRules.Keyword.FEW; } if (n == 6) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for da locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.daSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); const wt = goog.i18n.pluralRules.get_wt_(vf.v, vf.f); if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for ru locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.ruSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) { return goog.i18n.pluralRules.Keyword.ONE; } if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) { return goog.i18n.pluralRules.Keyword.FEW; } if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for be locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.beSelect_ = function(n, precision) { "use strict"; if (n % 10 == 1 && n % 100 != 11) { return goog.i18n.pluralRules.Keyword.ONE; } if (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return goog.i18n.pluralRules.Keyword.FEW; } if (n % 10 == 0 || n % 10 >= 5 && n % 10 <= 9 || n % 100 >= 11 && n % 100 <= 14) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for fr locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.frSelect_ = function(n, precision) { "use strict"; const i = n | 0; const e = goog.i18n.pluralRules.get_e_(n); const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i == 0 || i == 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (e == 0 && i != 0 && i % 1000000 == 0 && vf.v == 0 || (e < 0 || e > 5)) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for ga locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.gaSelect_ = function(n, precision) { "use strict"; if (n == 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (n == 2) { return goog.i18n.pluralRules.Keyword.TWO; } if (n >= 3 && n <= 6) { return goog.i18n.pluralRules.Keyword.FEW; } if (n >= 7 && n <= 10) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for af locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.afSelect_ = function(n, precision) { "use strict"; if (n == 1) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for mk locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.mkSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for ar locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.arSelect_ = function(n, precision) { "use strict"; if (n == 0) { return goog.i18n.pluralRules.Keyword.ZERO; } if (n == 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (n == 2) { return goog.i18n.pluralRules.Keyword.TWO; } if (n % 100 >= 3 && n % 100 <= 10) { return goog.i18n.pluralRules.Keyword.FEW; } if (n % 100 >= 11 && n % 100 <= 99) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for sl locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.slSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (vf.v == 0 && i % 100 == 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (vf.v == 0 && i % 100 == 2) { return goog.i18n.pluralRules.Keyword.TWO; } if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) { return goog.i18n.pluralRules.Keyword.FEW; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for lt locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.ltSelect_ = function(n, precision) { "use strict"; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) { return goog.i18n.pluralRules.Keyword.ONE; } if (n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) { return goog.i18n.pluralRules.Keyword.FEW; } if (vf.f != 0) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for mt locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.mtSelect_ = function(n, precision) { "use strict"; if (n == 1) { return goog.i18n.pluralRules.Keyword.ONE; } if (n == 2) { return goog.i18n.pluralRules.Keyword.TWO; } if (n == 0 || n % 100 >= 3 && n % 100 <= 10) { return goog.i18n.pluralRules.Keyword.FEW; } if (n % 100 >= 11 && n % 100 <= 19) { return goog.i18n.pluralRules.Keyword.MANY; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for en locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.enSelect_ = function(n, precision) { "use strict"; const i = n | 0; const vf = goog.i18n.pluralRules.get_vf_(n, precision); if (i == 1 && vf.v == 0) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Plural select rules for ln locale * * @param {number} n The count of items. * @param {number=} precision Precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific plural value. * @private */ goog.i18n.pluralRules.lnSelect_ = function(n, precision) { "use strict"; if (n >= 0 && n <= 1) { return goog.i18n.pluralRules.Keyword.ONE; } return goog.i18n.pluralRules.Keyword.OTHER; }; /** * Creates a selection function for the Closure locale to implement an * Intl PluralRules object using optional minimumFractionDigits. * Caches multiple PluralRules objects by precision value for a given locale. * @return {function(number,number=) : !goog.i18n.pluralRules.Keyword} Select function * @private */ goog.i18n.pluralRules.mapToNativeSelect_ = function() { const pluralLookup = { 'zero': goog.i18n.pluralRules.Keyword.ZERO, 'one': goog.i18n.pluralRules.Keyword.ONE, 'two': goog.i18n.pluralRules.Keyword.TWO, 'few': goog.i18n.pluralRules.Keyword.FEW, 'many': goog.i18n.pluralRules.Keyword.MANY, 'other': goog.i18n.pluralRules.Keyword.OTHER }; let pluralRulesObj = null; let pluralPrecisionCache = null; // Indexed by precision value /** * Plural Rules select function containing ECMAScript object * @param {number} itemCount The count of items. * @param {number=} precision for number formatting, if not default. * @return {!goog.i18n.pluralRules.Keyword} Locale-specific pluralvalue. */ const selectFn = function(itemCount, precision) { // Key used in cache. -1 indicates no precision specified const key = (precision === undefined) ? -1 : precision; if (pluralPrecisionCache === null) { pluralPrecisionCache = new Map(); } // Do we have a plurals object with the requested precision? pluralRulesObj = pluralPrecisionCache.get(key); if (!pluralRulesObj) { // No existing plurals object. Make a new object and add to cache. // Intl locales use '-', not '_' let locale = ''; //goog.LOCALE may be undefined. if (goog.LOCALE) { locale = goog.LOCALE.replace('_', '-'); } if (key === -1) { // Create object with no specified precision pluralRulesObj = new Intl.PluralRules(locale); } else { // Create object with desired precision pluralRulesObj = new Intl.PluralRules( locale, {minimumFractionDigits: precision}); } // Add to set of plural objects cached by precision. pluralPrecisionCache.set(key, pluralRulesObj); } const resultString = pluralRulesObj.select(itemCount); return pluralLookup[resultString]; }; return selectFn; }; /** * Selected Plural rules by locale. */ goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; if (goog.i18n.LocaleFeature.USE_ECMASCRIPT_I18N_PLURALRULES) { // Native mode selected goog.i18n.pluralRules.select = goog.i18n.pluralRules.mapToNativeSelect_(); } else { if (goog.LOCALE === 'af') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'am') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hiSelect_; } if (goog.LOCALE === 'ar') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.arSelect_; } if (goog.LOCALE === 'ar_DZ' || goog.LOCALE === 'ar-DZ') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.arSelect_; } if (goog.LOCALE === 'ar_EG' || goog.LOCALE === 'ar-EG') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.arSelect_; } if (goog.LOCALE === 'az') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'be') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.beSelect_; } if (goog.LOCALE === 'bg') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'bn') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hiSelect_; } if (goog.LOCALE === 'br') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.brSelect_; } if (goog.LOCALE === 'bs') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.srSelect_; } if (goog.LOCALE === 'ca') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.caSelect_; } if (goog.LOCALE === 'chr') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'cs') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.csSelect_; } if (goog.LOCALE === 'cy') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.cySelect_; } if (goog.LOCALE === 'da') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.daSelect_; } if (goog.LOCALE === 'de') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'de_AT' || goog.LOCALE === 'de-AT') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'de_CH' || goog.LOCALE === 'de-CH') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'el') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'en') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_AU' || goog.LOCALE === 'en-AU') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_CA' || goog.LOCALE === 'en-CA') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_GB' || goog.LOCALE === 'en-GB') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_IE' || goog.LOCALE === 'en-IE') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_IN' || goog.LOCALE === 'en-IN') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_SG' || goog.LOCALE === 'en-SG') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_US' || goog.LOCALE === 'en-US') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'en_ZA' || goog.LOCALE === 'en-ZA') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'es') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.esSelect_; } if (goog.LOCALE === 'es_419' || goog.LOCALE === 'es-419') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.esSelect_; } if (goog.LOCALE === 'es_ES' || goog.LOCALE === 'es-ES') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.esSelect_; } if (goog.LOCALE === 'es_MX' || goog.LOCALE === 'es-MX') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.esSelect_; } if (goog.LOCALE === 'es_US' || goog.LOCALE === 'es-US') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.esSelect_; } if (goog.LOCALE === 'et') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'eu') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'fa') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hiSelect_; } if (goog.LOCALE === 'fi') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'fil') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.filSelect_; } if (goog.LOCALE === 'fr') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.frSelect_; } if (goog.LOCALE === 'fr_CA' || goog.LOCALE === 'fr-CA') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.frSelect_; } if (goog.LOCALE === 'ga') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.gaSelect_; } if (goog.LOCALE === 'gl') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'gsw') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'gu') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hiSelect_; } if (goog.LOCALE === 'haw') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'he') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.heSelect_; } if (goog.LOCALE === 'hi') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hiSelect_; } if (goog.LOCALE === 'hr') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.srSelect_; } if (goog.LOCALE === 'hu') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'hy') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hySelect_; } if (goog.LOCALE === 'id') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'in') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'is') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.isSelect_; } if (goog.LOCALE === 'it') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.caSelect_; } if (goog.LOCALE === 'iw') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.heSelect_; } if (goog.LOCALE === 'ja') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'ka') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'kk') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'km') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'kn') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hiSelect_; } if (goog.LOCALE === 'ko') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'ky') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'ln') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.lnSelect_; } if (goog.LOCALE === 'lo') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'lt') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.ltSelect_; } if (goog.LOCALE === 'lv') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.lvSelect_; } if (goog.LOCALE === 'mk') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.mkSelect_; } if (goog.LOCALE === 'ml') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'mn') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'mo') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.roSelect_; } if (goog.LOCALE === 'mr') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'ms') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'mt') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.mtSelect_; } if (goog.LOCALE === 'my') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'nb') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'ne') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'nl') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'no') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'no_NO' || goog.LOCALE === 'no-NO') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'or') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'pa') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.lnSelect_; } if (goog.LOCALE === 'pl') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.plSelect_; } if (goog.LOCALE === 'pt') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.ptSelect_; } if (goog.LOCALE === 'pt_BR' || goog.LOCALE === 'pt-BR') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.ptSelect_; } if (goog.LOCALE === 'pt_PT' || goog.LOCALE === 'pt-PT') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.caSelect_; } if (goog.LOCALE === 'ro') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.roSelect_; } if (goog.LOCALE === 'ru') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.ruSelect_; } if (goog.LOCALE === 'sh') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.srSelect_; } if (goog.LOCALE === 'si') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.siSelect_; } if (goog.LOCALE === 'sk') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.csSelect_; } if (goog.LOCALE === 'sl') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.slSelect_; } if (goog.LOCALE === 'sq') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'sr') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.srSelect_; } if (goog.LOCALE === 'sr_Latn' || goog.LOCALE === 'sr-Latn') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.srSelect_; } if (goog.LOCALE === 'sv') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'sw') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'ta') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'te') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'th') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'tl') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.filSelect_; } if (goog.LOCALE === 'tr') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'uk') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.ruSelect_; } if (goog.LOCALE === 'ur') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_; } if (goog.LOCALE === 'uz') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.afSelect_; } if (goog.LOCALE === 'vi') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'zh') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'zh_CN' || goog.LOCALE === 'zh-CN') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'zh_HK' || goog.LOCALE === 'zh-HK') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'zh_TW' || goog.LOCALE === 'zh-TW') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.defaultSelect_; } if (goog.LOCALE === 'zu') { goog.i18n.pluralRules.select = goog.i18n.pluralRules.hiSelect_; } } // End of polyfill selections.