diff --git a/bin/common.js b/bin/common.js new file mode 100644 index 0000000..24c9a12 --- /dev/null +++ b/bin/common.js @@ -0,0 +1,15 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var combined = exports.combined = { + plurals: ['function(n, ord) {\n if (ord) return \'other\';\n return \'other\';\n}', 'function(n, ord) {\n if (ord) return \'other\';\n return (n == 1) ? \'one\' : \'other\';\n}', 'function(n, ord) {\n if (ord) return \'other\';\n return ((n == 0\n || n == 1)) ? \'one\' : \'other\';\n}', 'function(n, ord) {\n var s = String(n).split(\'.\'), v0 = !s[1];\n if (ord) return \'other\';\n return (n == 1 && v0) ? \'one\' : \'other\';\n}'], + categories: ['{cardinal:["other"],ordinal:["other"]}', '{cardinal:["one","other"],ordinal:["other"]}', '{cardinal:["one","other"],ordinal:["one","other"]}', '{cardinal:["one","two","other"],ordinal:["other"]}'] +}; + +var cardinals = exports.cardinals = { + plurals: ['function(n) {\n return \'other\';\n}', 'function(n) {\n return (n == 1) ? \'one\' : \'other\';\n}', 'function(n) {\n return ((n == 0\n || n == 1)) ? \'one\' : \'other\';\n}', 'function(n) {\n var s = String(n).split(\'.\'), v0 = !s[1];\n return (n == 1 && v0) ? \'one\' : \'other\';\n}'], + categories: ['{cardinal:["other"],ordinal:[]}', '{cardinal:["one","other"],ordinal:[]}', '{cardinal:["one","other"],ordinal:[]}', '{cardinal:["one","two","other"],ordinal:[]}'] +}; + diff --git a/bin/make-plural b/bin/make-plural new file mode 100755 index 0000000..80d2495 --- /dev/null +++ b/bin/make-plural @@ -0,0 +1,113 @@ +#!/usr/bin/env node + +'use strict'; + +var _common = require('./common'); + +var common = _interopRequireWildcard(_common); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var argv = require('minimist')(process.argv.slice(2), { + default: { locale: null, value: null, ordinal: null, cardinal: null, categories: false, es6: false }, + alias: { locale: 'l', value: 'v', ordinal: 'o', cardinal: 'c', es6: 'e' }, + string: ['locale', 'value'], + boolean: ['categories', 'es6'] +}); /** A compiler for make-plural.js + * + * Usage: + * ./bin/make-plural // checks all locale rules + * ./bin/make-plural [lc] // prints the locale function for LC + * ./bin/make-plural [lc] [n] [ord] // prints the (ORD ? ordinal : plural) category for N in locale LC + */ + +var MakePlural = require('../make-plural').load(require('../data/plurals.json'), require('../data/ordinals.json')); + +var es6module = function es6module(value) { + return '\nexport default {\n' + value + '\n}'; +}; + +// UMD pattern adapted from https://github.com/umdjs/umd/blob/master/returnExports.js +var umd = function umd(global, value) { + return '\n(function (root, ' + global + ') {\n if (typeof define === \'function\' && define.amd) {\n define(' + global + ');\n } else if (typeof exports === \'object\') {\n module.exports = ' + global + ';\n } else {\n root.' + global + ' = ' + global + ';\n }\n}(this, {\n' + value + '\n}));'; +}; + +function mapForEachLanguage(cb, opt) { + var style = opt && !opt.cardinals ? 'ordinal' : 'cardinal'; + var languages = []; + for (var lc in MakePlural.rules[style]) { + var key = /^[A-Z_$][0-9A-Z_$]*$/i.test(lc) && lc !== 'in' ? lc : JSON.stringify(lc); + var mp = new MakePlural(lc, opt).test(); + languages.push(key + ': ' + cb(mp)); + } + return languages; +} + +function printPluralsModule(es6) { + var cp = common[MakePlural.ordinals ? 'combined' : 'cardinals'].plurals; + var plurals = mapForEachLanguage(function (mp) { + var fn = mp.toString(); + cp.forEach(function (p, i) { + if (fn === p) fn = '_cp[' + i + ']'; + }); + return fn; + }); + if (es6) { + console.log('const _cp = [\n' + cp.join(',\n') + '\n];'); + console.log(es6module(plurals.join(',\n\n'))); + } else { + console.log('var _cp = [\n' + cp.join(',\n') + '\n];'); + console.log(umd('plurals', plurals.join(',\n\n'))); + } +} + +function printCategoriesModule(es6) { + var cc = common[MakePlural.ordinals ? 'combined' : 'cardinals'].categories; + var categories = mapForEachLanguage(function (mp) { + var cat = JSON.stringify(mp.categories).replace(/"(\w+)":/g, '$1:'); + cc.forEach(function (c, i) { + if (cat === c) cat = '_cc[' + i + ']'; + }); + return cat; + }); + if (es6) { + console.log('const _cc = [\n ' + cc.join(',\n ') + '\n];'); + console.log(es6module(categories.join(',\n'))); + } else { + console.log('var _cc = [\n ' + cc.join(',\n ') + '\n];'); + console.log(umd('pluralCategories', categories.join(',\n'))); + } +} + +function truthy(v) { + if (v === '0' || v === 'false') return false; + return !!v; +} + +argv._.forEach(function (a) { + if (argv.locale === null) argv.locale = a;else if (argv.value === null) argv.value = a;else if (argv.ordinal === null) argv.ordinal = a; +}); + +MakePlural.cardinals = argv.cardinal !== null ? truthy(argv.cardinal) : true; +MakePlural.ordinals = argv.ordinal !== null ? truthy(argv.ordinal) : true; + +if (argv.locale) { + var mp = new MakePlural(argv.locale).test(); + if (argv.categories) { + var cats = mp.categories.cardinal.concat(mp.categories.ordinal).filter(function (v, i, self) { + return self.indexOf(v) === i; + }); + console.log(cats.join(', ')); + } else if (argv.value !== null) { + console.log(mp(argv.value, truthy(argv.ordinal))); + } else { + console.log(mp.toString(argv.locale)); + } +} else { + if (argv.categories) { + printCategoriesModule(argv.es6); + } else { + printPluralsModule(argv.es6); + } +} + diff --git a/data/ordinals.json b/data/ordinals.json new file mode 100644 index 0000000..2acb92e --- /dev/null +++ b/data/ordinals.json @@ -0,0 +1,349 @@ +{ + "supplemental": { + "version": { + "_number": "$Revision: 13637 $", + "_unicodeVersion": "10.0.0", + "_cldrVersion": "32" + }, + "plurals-type-ordinal": { + "af": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "am": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ar": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "as": { + "pluralRule-count-one": "n = 1,5,7,8,9,10 @integer 1, 5, 7~10", + "pluralRule-count-two": "n = 2,3 @integer 2, 3", + "pluralRule-count-few": "n = 4 @integer 4", + "pluralRule-count-many": "n = 6 @integer 6", + "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, …" + }, + "az": { + "pluralRule-count-one": "i % 10 = 1,2,5,7,8 or i % 100 = 20,50,70,80 @integer 1, 2, 5, 7, 8, 11, 12, 15, 17, 18, 20~22, 25, 101, 1001, …", + "pluralRule-count-few": "i % 10 = 3,4 or i % 1000 = 100,200,300,400,500,600,700,800,900 @integer 3, 4, 13, 14, 23, 24, 33, 34, 43, 44, 53, 54, 63, 64, 73, 74, 100, 1003, …", + "pluralRule-count-many": "i = 0 or i % 10 = 6 or i % 100 = 40,60,90 @integer 0, 6, 16, 26, 36, 40, 46, 56, 106, 1006, …", + "pluralRule-count-other": " @integer 9, 10, 19, 29, 30, 39, 49, 59, 69, 79, 109, 1000, 10000, 100000, 1000000, …" + }, + "be": { + "pluralRule-count-few": "n % 10 = 2,3 and n % 100 != 12,13 @integer 2, 3, 22, 23, 32, 33, 42, 43, 52, 53, 62, 63, 72, 73, 82, 83, 102, 1002, …", + "pluralRule-count-other": " @integer 0, 1, 4~17, 100, 1000, 10000, 100000, 1000000, …" + }, + "bg": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "bn": { + "pluralRule-count-one": "n = 1,5,7,8,9,10 @integer 1, 5, 7~10", + "pluralRule-count-two": "n = 2,3 @integer 2, 3", + "pluralRule-count-few": "n = 4 @integer 4", + "pluralRule-count-many": "n = 6 @integer 6", + "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, …" + }, + "bs": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ca": { + "pluralRule-count-one": "n = 1,3 @integer 1, 3", + "pluralRule-count-two": "n = 2 @integer 2", + "pluralRule-count-few": "n = 4 @integer 4", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "ce": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "cs": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "cy": { + "pluralRule-count-zero": "n = 0,7,8,9 @integer 0, 7~9", + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-two": "n = 2 @integer 2", + "pluralRule-count-few": "n = 3,4 @integer 3, 4", + "pluralRule-count-many": "n = 5,6 @integer 5, 6", + "pluralRule-count-other": " @integer 10~25, 100, 1000, 10000, 100000, 1000000, …" + }, + "da": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "de": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "dsb": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "el": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "en": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12 @integer 2, 22, 32, 42, 52, 62, 72, 82, 102, 1002, …", + "pluralRule-count-few": "n % 10 = 3 and n % 100 != 13 @integer 3, 23, 33, 43, 53, 63, 73, 83, 103, 1003, …", + "pluralRule-count-other": " @integer 0, 4~18, 100, 1000, 10000, 100000, 1000000, …" + }, + "es": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "et": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "eu": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "fa": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "fi": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "fil": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "fr": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "fy": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ga": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "gl": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "gsw": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "gu": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-two": "n = 2,3 @integer 2, 3", + "pluralRule-count-few": "n = 4 @integer 4", + "pluralRule-count-many": "n = 6 @integer 6", + "pluralRule-count-other": " @integer 0, 5, 7~20, 100, 1000, 10000, 100000, 1000000, …" + }, + "he": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "hi": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-two": "n = 2,3 @integer 2, 3", + "pluralRule-count-few": "n = 4 @integer 4", + "pluralRule-count-many": "n = 6 @integer 6", + "pluralRule-count-other": " @integer 0, 5, 7~20, 100, 1000, 10000, 100000, 1000000, …" + }, + "hr": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "hsb": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "hu": { + "pluralRule-count-one": "n = 1,5 @integer 1, 5", + "pluralRule-count-other": " @integer 0, 2~4, 6~17, 100, 1000, 10000, 100000, 1000000, …" + }, + "hy": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "id": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "in": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "is": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "it": { + "pluralRule-count-many": "n = 11,8,80,800 @integer 8, 11, 80, 800", + "pluralRule-count-other": " @integer 0~7, 9, 10, 12~17, 100, 1000, 10000, 100000, 1000000, …" + }, + "iw": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ja": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ka": { + "pluralRule-count-one": "i = 1 @integer 1", + "pluralRule-count-many": "i = 0 or i % 100 = 2..20,40,60,80 @integer 0, 2~16, 102, 1002, …", + "pluralRule-count-other": " @integer 21~36, 100, 1000, 10000, 100000, 1000000, …" + }, + "kk": { + "pluralRule-count-many": "n % 10 = 6 or n % 10 = 9 or n % 10 = 0 and n != 0 @integer 6, 9, 10, 16, 19, 20, 26, 29, 30, 36, 39, 40, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @integer 0~5, 7, 8, 11~15, 17, 18, 21, 101, 1001, …" + }, + "km": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "kn": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ko": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ky": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "lo": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "lt": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "lv": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "mk": { + "pluralRule-count-one": "i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-two": "i % 10 = 2 and i % 100 != 12 @integer 2, 22, 32, 42, 52, 62, 72, 82, 102, 1002, …", + "pluralRule-count-many": "i % 10 = 7,8 and i % 100 != 17,18 @integer 7, 8, 27, 28, 37, 38, 47, 48, 57, 58, 67, 68, 77, 78, 87, 88, 107, 1007, …", + "pluralRule-count-other": " @integer 0, 3~6, 9~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "ml": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "mn": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "mo": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "mr": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-two": "n = 2,3 @integer 2, 3", + "pluralRule-count-few": "n = 4 @integer 4", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "ms": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "my": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "nb": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ne": { + "pluralRule-count-one": "n = 1..4 @integer 1~4", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "nl": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "or": { + "pluralRule-count-one": "n = 1,5,7..9 @integer 1, 5, 7~9", + "pluralRule-count-two": "n = 2,3 @integer 2, 3", + "pluralRule-count-few": "n = 4 @integer 4", + "pluralRule-count-many": "n = 6 @integer 6", + "pluralRule-count-other": " @integer 0, 10~24, 100, 1000, 10000, 100000, 1000000, …" + }, + "pa": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "pl": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "prg": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ps": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "pt": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ro": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "root": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ru": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "sd": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "sh": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "si": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "sk": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "sl": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "sq": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-many": "n % 10 = 4 and n % 100 != 14 @integer 4, 24, 34, 44, 54, 64, 74, 84, 104, 1004, …", + "pluralRule-count-other": " @integer 0, 2, 3, 5~17, 100, 1000, 10000, 100000, 1000000, …" + }, + "sr": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "sv": { + "pluralRule-count-one": "n % 10 = 1,2 and n % 100 != 11,12 @integer 1, 2, 21, 22, 31, 32, 41, 42, 51, 52, 61, 62, 71, 72, 81, 82, 101, 1001, …", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, …" + }, + "sw": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "ta": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "te": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "th": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "tk": { + "pluralRule-count-few": "n % 10 = 6,9 or n = 10 @integer 6, 9, 10, 16, 19, 26, 29, 36, 39, 106, 1006, …", + "pluralRule-count-other": " @integer 0~5, 7, 8, 11~15, 17, 18, 20, 100, 1000, 10000, 100000, 1000000, …" + }, + "tl": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "tr": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "uk": { + "pluralRule-count-few": "n % 10 = 3 and n % 100 != 13 @integer 3, 23, 33, 43, 53, 63, 73, 83, 103, 1003, …", + "pluralRule-count-other": " @integer 0~2, 4~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "ur": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "uz": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "vi": { + "pluralRule-count-one": "n = 1 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …" + }, + "yue": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "zh": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + }, + "zu": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, …" + } + } + } +} diff --git a/data/plurals.json b/data/plurals.json new file mode 100644 index 0000000..a1647c2 --- /dev/null +++ b/data/plurals.json @@ -0,0 +1,865 @@ +{ + "supplemental": { + "version": { + "_number": "$Revision: 13640 $", + "_unicodeVersion": "10.0.0", + "_cldrVersion": "32" + }, + "plurals-type-cardinal": { + "af": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ak": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "am": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ar": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ars": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "as": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "asa": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ast": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "az": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "be": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-few": "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …", + "pluralRule-count-many": "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …" + }, + "bem": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bez": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bh": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bm": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bn": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "br": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …", + "pluralRule-count-few": "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …", + "pluralRule-count-other": " @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …" + }, + "brx": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bs": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ca": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ce": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "cgg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "chr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ckb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "cs": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "cy": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000", + "pluralRule-count-many": "n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000", + "pluralRule-count-other": " @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "da": { + "pluralRule-count-one": "n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "de": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dsb": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dv": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dz": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ee": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "el": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "en": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "eo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "es": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "et": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "eu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fa": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ff": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fi": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fil": { + "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" + }, + "fo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fr": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fur": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fy": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ga": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000", + "pluralRule-count-many": "n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000", + "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gd": { + "pluralRule-count-one": "n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000", + "pluralRule-count-two": "n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000", + "pluralRule-count-few": "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00", + "pluralRule-count-other": " @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gsw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gu": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "guw": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gv": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …", + "pluralRule-count-two": "v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …", + "pluralRule-count-few": "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 3~10, 13~19, 23, 103, 1003, …" + }, + "ha": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "haw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "he": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-two": "i = 2 and v = 0 @integer 2", + "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hi": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hr": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hsb": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hy": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "id": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ig": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ii": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "in": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "io": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "is": { + "pluralRule-count-one": "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "it": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "iu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "iw": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-two": "i = 2 and v = 0 @integer 2", + "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ja": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jbo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jgo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ji": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jmc": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jv": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jw": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ka": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kab": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kaj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kcg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kde": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kea": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kkj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kl": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "km": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kn": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ko": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ks": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ksb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ksh": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ku": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ky": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lag": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lkt": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ln": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lt": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-few": "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …", + "pluralRule-count-many": "f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lv": { + "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" + }, + "mas": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mg": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mgo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mk": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ml": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mo": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" + }, + "mr": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ms": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mt": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-few": "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …", + "pluralRule-count-many": "n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "my": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nah": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "naq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nd": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ne": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nnh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "no": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nqo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nso": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ny": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nyn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "om": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "or": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "os": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pa": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pap": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "prg": { + "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" + }, + "ps": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pt": { + "pluralRule-count-one": "i = 0..1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pt-PT": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "rm": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ro": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" + }, + "rof": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "root": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ru": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "rwk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sah": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "saq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sd": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sdh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "se": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "seh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ses": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sg": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sh": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "shi": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-few": "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00", + "pluralRule-count-other": " @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "si": { + "pluralRule-count-one": "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sk": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "sl": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "sma": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smi": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sms": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "so": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sr": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ss": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ssy": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "st": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sv": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sw": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "syr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ta": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "te": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "teo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "th": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ti": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tig": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tl": { + "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" + }, + "tn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "to": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ts": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tzm": { + "pluralRule-count-one": "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0", + "pluralRule-count-other": " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ug": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "uk": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ur": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "uz": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ve": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vi": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vun": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wa": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wae": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "xh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "xog": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yi": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yue": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "zh": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "zu": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + } + } + } +} diff --git a/es6/pluralCategories.js b/es6/pluralCategories.js new file mode 100644 index 0000000..c796a06 --- /dev/null +++ b/es6/pluralCategories.js @@ -0,0 +1,213 @@ +const _cc = [ + {cardinal:["other"],ordinal:["other"]}, + {cardinal:["one","other"],ordinal:["other"]}, + {cardinal:["one","other"],ordinal:["one","other"]}, + {cardinal:["one","two","other"],ordinal:["other"]} +]; + +export default { +af: _cc[1], +ak: _cc[1], +am: _cc[1], +ar: {cardinal:["zero","one","two","few","many","other"],ordinal:["other"]}, +ars: {cardinal:["zero","one","two","few","many","other"],ordinal:["other"]}, +as: {cardinal:["one","other"],ordinal:["one","two","few","many","other"]}, +asa: _cc[1], +ast: _cc[1], +az: {cardinal:["one","other"],ordinal:["one","few","many","other"]}, +be: {cardinal:["one","few","many","other"],ordinal:["few","other"]}, +bem: _cc[1], +bez: _cc[1], +bg: _cc[1], +bh: _cc[1], +bm: _cc[0], +bn: {cardinal:["one","other"],ordinal:["one","two","few","many","other"]}, +bo: _cc[0], +br: {cardinal:["one","two","few","many","other"],ordinal:["other"]}, +brx: _cc[1], +bs: {cardinal:["one","few","other"],ordinal:["other"]}, +ca: {cardinal:["one","other"],ordinal:["one","two","few","other"]}, +ce: _cc[1], +cgg: _cc[1], +chr: _cc[1], +ckb: _cc[1], +cs: {cardinal:["one","few","many","other"],ordinal:["other"]}, +cy: {cardinal:["zero","one","two","few","many","other"],ordinal:["zero","one","two","few","many","other"]}, +da: _cc[1], +de: _cc[1], +dsb: {cardinal:["one","two","few","other"],ordinal:["other"]}, +dv: _cc[1], +dz: _cc[0], +ee: _cc[1], +el: _cc[1], +en: {cardinal:["one","other"],ordinal:["one","two","few","other"]}, +eo: _cc[1], +es: _cc[1], +et: _cc[1], +eu: _cc[1], +fa: _cc[1], +ff: _cc[1], +fi: _cc[1], +fil: _cc[2], +fo: _cc[1], +fr: _cc[2], +fur: _cc[1], +fy: _cc[1], +ga: {cardinal:["one","two","few","many","other"],ordinal:["one","other"]}, +gd: {cardinal:["one","two","few","other"],ordinal:["other"]}, +gl: _cc[1], +gsw: _cc[1], +gu: {cardinal:["one","other"],ordinal:["one","two","few","many","other"]}, +guw: _cc[1], +gv: {cardinal:["one","two","few","many","other"],ordinal:["other"]}, +ha: _cc[1], +haw: _cc[1], +he: {cardinal:["one","two","many","other"],ordinal:["other"]}, +hi: {cardinal:["one","other"],ordinal:["one","two","few","many","other"]}, +hr: {cardinal:["one","few","other"],ordinal:["other"]}, +hsb: {cardinal:["one","two","few","other"],ordinal:["other"]}, +hu: _cc[2], +hy: _cc[2], +id: _cc[0], +ig: _cc[0], +ii: _cc[0], +"in": _cc[0], +io: _cc[1], +is: _cc[1], +it: {cardinal:["one","other"],ordinal:["many","other"]}, +iu: _cc[3], +iw: {cardinal:["one","two","many","other"],ordinal:["other"]}, +ja: _cc[0], +jbo: _cc[0], +jgo: _cc[1], +ji: _cc[1], +jmc: _cc[1], +jv: _cc[0], +jw: _cc[0], +ka: {cardinal:["one","other"],ordinal:["one","many","other"]}, +kab: _cc[1], +kaj: _cc[1], +kcg: _cc[1], +kde: _cc[0], +kea: _cc[0], +kk: {cardinal:["one","other"],ordinal:["many","other"]}, +kkj: _cc[1], +kl: _cc[1], +km: _cc[0], +kn: _cc[1], +ko: _cc[0], +ks: _cc[1], +ksb: _cc[1], +ksh: {cardinal:["zero","one","other"],ordinal:["other"]}, +ku: _cc[1], +kw: _cc[3], +ky: _cc[1], +lag: {cardinal:["zero","one","other"],ordinal:["other"]}, +lb: _cc[1], +lg: _cc[1], +lkt: _cc[0], +ln: _cc[1], +lo: {cardinal:["other"],ordinal:["one","other"]}, +lt: {cardinal:["one","few","many","other"],ordinal:["other"]}, +lv: {cardinal:["zero","one","other"],ordinal:["other"]}, +mas: _cc[1], +mg: _cc[1], +mgo: _cc[1], +mk: {cardinal:["one","other"],ordinal:["one","two","many","other"]}, +ml: _cc[1], +mn: _cc[1], +mo: {cardinal:["one","few","other"],ordinal:["one","other"]}, +mr: {cardinal:["one","other"],ordinal:["one","two","few","other"]}, +ms: {cardinal:["other"],ordinal:["one","other"]}, +mt: {cardinal:["one","few","many","other"],ordinal:["other"]}, +my: _cc[0], +nah: _cc[1], +naq: _cc[3], +nb: _cc[1], +nd: _cc[1], +ne: _cc[2], +nl: _cc[1], +nn: _cc[1], +nnh: _cc[1], +no: _cc[1], +nqo: _cc[0], +nr: _cc[1], +nso: _cc[1], +ny: _cc[1], +nyn: _cc[1], +om: _cc[1], +or: {cardinal:["one","other"],ordinal:["one","two","few","many","other"]}, +os: _cc[1], +pa: _cc[1], +pap: _cc[1], +pl: {cardinal:["one","few","many","other"],ordinal:["other"]}, +prg: {cardinal:["zero","one","other"],ordinal:["other"]}, +ps: _cc[1], +pt: _cc[1], +"pt-PT": _cc[1], +rm: _cc[1], +ro: {cardinal:["one","few","other"],ordinal:["one","other"]}, +rof: _cc[1], +root: _cc[0], +ru: {cardinal:["one","few","many","other"],ordinal:["other"]}, +rwk: _cc[1], +sah: _cc[0], +saq: _cc[1], +sd: _cc[1], +sdh: _cc[1], +se: _cc[3], +seh: _cc[1], +ses: _cc[0], +sg: _cc[0], +sh: {cardinal:["one","few","other"],ordinal:["other"]}, +shi: {cardinal:["one","few","other"],ordinal:["other"]}, +si: _cc[1], +sk: {cardinal:["one","few","many","other"],ordinal:["other"]}, +sl: {cardinal:["one","two","few","other"],ordinal:["other"]}, +sma: _cc[3], +smi: _cc[3], +smj: _cc[3], +smn: _cc[3], +sms: _cc[3], +sn: _cc[1], +so: _cc[1], +sq: {cardinal:["one","other"],ordinal:["one","many","other"]}, +sr: {cardinal:["one","few","other"],ordinal:["other"]}, +ss: _cc[1], +ssy: _cc[1], +st: _cc[1], +sv: _cc[2], +sw: _cc[1], +syr: _cc[1], +ta: _cc[1], +te: _cc[1], +teo: _cc[1], +th: _cc[0], +ti: _cc[1], +tig: _cc[1], +tk: {cardinal:["one","other"],ordinal:["few","other"]}, +tl: _cc[2], +tn: _cc[1], +to: _cc[0], +tr: _cc[1], +ts: _cc[1], +tzm: _cc[1], +ug: _cc[1], +uk: {cardinal:["one","few","many","other"],ordinal:["few","other"]}, +ur: _cc[1], +uz: _cc[1], +ve: _cc[1], +vi: {cardinal:["other"],ordinal:["one","other"]}, +vo: _cc[1], +vun: _cc[1], +wa: _cc[1], +wae: _cc[1], +wo: _cc[0], +xh: _cc[1], +xog: _cc[1], +yi: _cc[1], +yo: _cc[0], +yue: _cc[0], +zh: _cc[0], +zu: _cc[1] +} diff --git a/es6/plurals.js b/es6/plurals.js new file mode 100644 index 0000000..a74f7c0 --- /dev/null +++ b/es6/plurals.js @@ -0,0 +1,978 @@ +const _cp = [ +function(n, ord) { + if (ord) return 'other'; + return 'other'; +}, +function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' : 'other'; +}, +function(n, ord) { + if (ord) return 'other'; + return ((n == 0 + || n == 1)) ? 'one' : 'other'; +}, +function(n, ord) { + var s = String(n).split('.'), v0 = !s[1]; + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +} +]; + +export default { +af: _cp[1], + +ak: _cp[2], + +am: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +ar: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((n100 >= 3 && n100 <= 10)) ? 'few' + : ((n100 >= 11 && n100 <= 99)) ? 'many' + : 'other'; +}, + +ars: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((n100 >= 3 && n100 <= 10)) ? 'few' + : ((n100 >= 11 && n100 <= 99)) ? 'many' + : 'other'; +}, + +as: function(n, ord) { + if (ord) return ((n == 1 || n == 5 || n == 7 || n == 8 || n == 9 + || n == 10)) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +asa: _cp[1], + +ast: _cp[3], + +az: function(n, ord) { + var s = String(n).split('.'), i = s[0], i10 = i.slice(-1), + i100 = i.slice(-2), i1000 = i.slice(-3); + if (ord) return ((i10 == 1 || i10 == 2 || i10 == 5 || i10 == 7 || i10 == 8) + || (i100 == 20 || i100 == 50 || i100 == 70 + || i100 == 80)) ? 'one' + : ((i10 == 3 || i10 == 4) || (i1000 == 100 || i1000 == 200 + || i1000 == 300 || i1000 == 400 || i1000 == 500 || i1000 == 600 || i1000 == 700 + || i1000 == 800 + || i1000 == 900)) ? 'few' + : (i == 0 || i10 == 6 || (i100 == 40 || i100 == 60 + || i100 == 90)) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +be: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return ((n10 == 2 + || n10 == 3) && n100 != 12 && n100 != 13) ? 'few' : 'other'; + return (n10 == 1 && n100 != 11) ? 'one' + : ((n10 >= 2 && n10 <= 4) && (n100 < 12 + || n100 > 14)) ? 'few' + : (t0 && n10 == 0 || (n10 >= 5 && n10 <= 9) + || (n100 >= 11 && n100 <= 14)) ? 'many' + : 'other'; +}, + +bem: _cp[1], + +bez: _cp[1], + +bg: _cp[1], + +bh: _cp[2], + +bm: _cp[0], + +bn: function(n, ord) { + if (ord) return ((n == 1 || n == 5 || n == 7 || n == 8 || n == 9 + || n == 10)) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +bo: _cp[0], + +br: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), + n1000000 = t0 && s[0].slice(-6); + if (ord) return 'other'; + return (n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91) ? 'one' + : (n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92) ? 'two' + : (((n10 == 3 || n10 == 4) || n10 == 9) && (n100 < 10 + || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90 + || n100 > 99)) ? 'few' + : (n != 0 && t0 && n1000000 == 0) ? 'many' + : 'other'; +}, + +brx: _cp[1], + +bs: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +ca: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1]; + if (ord) return ((n == 1 + || n == 3)) ? 'one' + : (n == 2) ? 'two' + : (n == 4) ? 'few' + : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +ce: _cp[1], + +cgg: _cp[1], + +chr: _cp[1], + +ckb: _cp[1], + +cs: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1]; + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : ((i >= 2 && i <= 4) && v0) ? 'few' + : (!v0) ? 'many' + : 'other'; +}, + +cy: function(n, ord) { + if (ord) return ((n == 0 || n == 7 || n == 8 + || n == 9)) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((n == 3 + || n == 4)) ? 'few' + : ((n == 5 + || n == 6)) ? 'many' + : 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : (n == 3) ? 'few' + : (n == 6) ? 'many' + : 'other'; +}, + +da: function(n, ord) { + var s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n; + if (ord) return 'other'; + return (n == 1 || !t0 && (i == 0 + || i == 1)) ? 'one' : 'other'; +}, + +de: _cp[3], + +dsb: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i100 = i.slice(-2), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i100 == 1 + || f100 == 1) ? 'one' + : (v0 && i100 == 2 + || f100 == 2) ? 'two' + : (v0 && (i100 == 3 || i100 == 4) || (f100 == 3 + || f100 == 4)) ? 'few' + : 'other'; +}, + +dv: _cp[1], + +dz: _cp[0], + +ee: _cp[1], + +el: _cp[1], + +en: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return (n10 == 1 && n100 != 11) ? 'one' + : (n10 == 2 && n100 != 12) ? 'two' + : (n10 == 3 && n100 != 13) ? 'few' + : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +eo: _cp[1], + +es: _cp[1], + +et: _cp[3], + +eu: _cp[1], + +fa: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +ff: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +fi: _cp[3], + +fil: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), f10 = f.slice(-1); + if (ord) return (n == 1) ? 'one' : 'other'; + return (v0 && (i == 1 || i == 2 || i == 3) + || v0 && i10 != 4 && i10 != 6 && i10 != 9 + || !v0 && f10 != 4 && f10 != 6 && f10 != 9) ? 'one' : 'other'; +}, + +fo: _cp[1], + +fr: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +fur: _cp[1], + +fy: _cp[3], + +ga: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return (n == 1) ? 'one' : 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((t0 && n >= 3 && n <= 6)) ? 'few' + : ((t0 && n >= 7 && n <= 10)) ? 'many' + : 'other'; +}, + +gd: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return 'other'; + return ((n == 1 + || n == 11)) ? 'one' + : ((n == 2 + || n == 12)) ? 'two' + : (((t0 && n >= 3 && n <= 10) + || (t0 && n >= 13 && n <= 19))) ? 'few' + : 'other'; +}, + +gl: _cp[3], + +gsw: _cp[1], + +gu: function(n, ord) { + if (ord) return (n == 1) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +guw: _cp[2], + +gv: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1) ? 'one' + : (v0 && i10 == 2) ? 'two' + : (v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60 + || i100 == 80)) ? 'few' + : (!v0) ? 'many' + : 'other'; +}, + +ha: _cp[1], + +haw: _cp[1], + +he: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : (i == 2 && v0) ? 'two' + : (v0 && (n < 0 + || n > 10) && t0 && n10 == 0) ? 'many' + : 'other'; +}, + +hi: function(n, ord) { + if (ord) return (n == 1) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +hr: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +hsb: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i100 = i.slice(-2), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i100 == 1 + || f100 == 1) ? 'one' + : (v0 && i100 == 2 + || f100 == 2) ? 'two' + : (v0 && (i100 == 3 || i100 == 4) || (f100 == 3 + || f100 == 4)) ? 'few' + : 'other'; +}, + +hu: function(n, ord) { + if (ord) return ((n == 1 + || n == 5)) ? 'one' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +hy: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +id: _cp[0], + +ig: _cp[0], + +ii: _cp[0], + +"in": _cp[0], + +io: _cp[3], + +is: function(n, ord) { + var s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n, + i10 = i.slice(-1), i100 = i.slice(-2); + if (ord) return 'other'; + return (t0 && i10 == 1 && i100 != 11 + || !t0) ? 'one' : 'other'; +}, + +it: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1]; + if (ord) return ((n == 11 || n == 8 || n == 80 + || n == 800)) ? 'many' : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +iu: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +iw: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : (i == 2 && v0) ? 'two' + : (v0 && (n < 0 + || n > 10) && t0 && n10 == 0) ? 'many' + : 'other'; +}, + +ja: _cp[0], + +jbo: _cp[0], + +jgo: _cp[1], + +ji: _cp[3], + +jmc: _cp[1], + +jv: _cp[0], + +jw: _cp[0], + +ka: function(n, ord) { + var s = String(n).split('.'), i = s[0], i100 = i.slice(-2); + if (ord) return (i == 1) ? 'one' + : (i == 0 || ((i100 >= 2 && i100 <= 20) || i100 == 40 || i100 == 60 + || i100 == 80)) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +kab: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +kaj: _cp[1], + +kcg: _cp[1], + +kde: _cp[0], + +kea: _cp[0], + +kk: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return (n10 == 6 || n10 == 9 + || t0 && n10 == 0 && n != 0) ? 'many' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +kkj: _cp[1], + +kl: _cp[1], + +km: _cp[0], + +kn: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +ko: _cp[0], + +ks: _cp[1], + +ksb: _cp[1], + +ksh: function(n, ord) { + if (ord) return 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : 'other'; +}, + +ku: _cp[1], + +kw: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +ky: _cp[1], + +lag: function(n, ord) { + var s = String(n).split('.'), i = s[0]; + if (ord) return 'other'; + return (n == 0) ? 'zero' + : ((i == 0 + || i == 1) && n != 0) ? 'one' + : 'other'; +}, + +lb: _cp[1], + +lg: _cp[1], + +lkt: _cp[0], + +ln: _cp[2], + +lo: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return 'other'; +}, + +lt: function(n, ord) { + var s = String(n).split('.'), f = s[1] || '', t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n10 == 1 && (n100 < 11 + || n100 > 19)) ? 'one' + : ((n10 >= 2 && n10 <= 9) && (n100 < 11 + || n100 > 19)) ? 'few' + : (f != 0) ? 'many' + : 'other'; +}, + +lv: function(n, ord) { + var s = String(n).split('.'), f = s[1] || '', v = f.length, + t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), + n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1); + if (ord) return 'other'; + return (t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) + || v == 2 && (f100 >= 11 && f100 <= 19)) ? 'zero' + : (n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 + || v != 2 && f10 == 1) ? 'one' + : 'other'; +}, + +mas: _cp[1], + +mg: _cp[2], + +mgo: _cp[1], + +mk: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1); + if (ord) return (i10 == 1 && i100 != 11) ? 'one' + : (i10 == 2 && i100 != 12) ? 'two' + : ((i10 == 7 + || i10 == 8) && i100 != 17 && i100 != 18) ? 'many' + : 'other'; + return (v0 && i10 == 1 + || f10 == 1) ? 'one' : 'other'; +}, + +ml: _cp[1], + +mn: _cp[1], + +mo: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return (n == 1) ? 'one' : 'other'; + return (n == 1 && v0) ? 'one' + : (!v0 || n == 0 + || n != 1 && (n100 >= 1 && n100 <= 19)) ? 'few' + : 'other'; +}, + +mr: function(n, ord) { + if (ord) return (n == 1) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +ms: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return 'other'; +}, + +mt: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 0 + || (n100 >= 2 && n100 <= 10)) ? 'few' + : ((n100 >= 11 && n100 <= 19)) ? 'many' + : 'other'; +}, + +my: _cp[0], + +nah: _cp[1], + +naq: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +nb: _cp[1], + +nd: _cp[1], + +ne: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return ((t0 && n >= 1 && n <= 4)) ? 'one' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +nl: _cp[3], + +nn: _cp[1], + +nnh: _cp[1], + +no: _cp[1], + +nqo: _cp[0], + +nr: _cp[1], + +nso: _cp[2], + +ny: _cp[1], + +nyn: _cp[1], + +om: _cp[1], + +or: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return ((n == 1 || n == 5 + || (t0 && n >= 7 && n <= 9))) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +os: _cp[1], + +pa: _cp[2], + +pap: _cp[1], + +pl: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 + || i100 > 14)) ? 'few' + : (v0 && i != 1 && (i10 == 0 || i10 == 1) + || v0 && (i10 >= 5 && i10 <= 9) + || v0 && (i100 >= 12 && i100 <= 14)) ? 'many' + : 'other'; +}, + +prg: function(n, ord) { + var s = String(n).split('.'), f = s[1] || '', v = f.length, + t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), + n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1); + if (ord) return 'other'; + return (t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) + || v == 2 && (f100 >= 11 && f100 <= 19)) ? 'zero' + : (n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 + || v != 2 && f10 == 1) ? 'one' + : 'other'; +}, + +ps: _cp[1], + +pt: function(n, ord) { + var s = String(n).split('.'), i = s[0]; + if (ord) return 'other'; + return ((i == 0 + || i == 1)) ? 'one' : 'other'; +}, + +"pt-PT": _cp[3], + +rm: _cp[1], + +ro: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return (n == 1) ? 'one' : 'other'; + return (n == 1 && v0) ? 'one' + : (!v0 || n == 0 + || n != 1 && (n100 >= 1 && n100 <= 19)) ? 'few' + : 'other'; +}, + +rof: _cp[1], + +root: _cp[0], + +ru: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 + || i100 > 14)) ? 'few' + : (v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) + || v0 && (i100 >= 11 && i100 <= 14)) ? 'many' + : 'other'; +}, + +rwk: _cp[1], + +sah: _cp[0], + +saq: _cp[1], + +sd: _cp[1], + +sdh: _cp[1], + +se: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +seh: _cp[1], + +ses: _cp[0], + +sg: _cp[0], + +sh: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +shi: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' + : ((t0 && n >= 2 && n <= 10)) ? 'few' + : 'other'; +}, + +si: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || ''; + if (ord) return 'other'; + return ((n == 0 || n == 1) + || i == 0 && f == 1) ? 'one' : 'other'; +}, + +sk: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1]; + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : ((i >= 2 && i <= 4) && v0) ? 'few' + : (!v0) ? 'many' + : 'other'; +}, + +sl: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i100 = i.slice(-2); + if (ord) return 'other'; + return (v0 && i100 == 1) ? 'one' + : (v0 && i100 == 2) ? 'two' + : (v0 && (i100 == 3 || i100 == 4) + || !v0) ? 'few' + : 'other'; +}, + +sma: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +smi: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +smj: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +smn: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +sms: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +sn: _cp[1], + +so: _cp[1], + +sq: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return (n == 1) ? 'one' + : (n10 == 4 && n100 != 14) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +sr: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +ss: _cp[1], + +ssy: _cp[1], + +st: _cp[1], + +sv: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return ((n10 == 1 + || n10 == 2) && n100 != 11 && n100 != 12) ? 'one' : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +sw: _cp[3], + +syr: _cp[1], + +ta: _cp[1], + +te: _cp[1], + +teo: _cp[1], + +th: _cp[0], + +ti: _cp[2], + +tig: _cp[1], + +tk: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return ((n10 == 6 || n10 == 9) + || n == 10) ? 'few' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +tl: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), f10 = f.slice(-1); + if (ord) return (n == 1) ? 'one' : 'other'; + return (v0 && (i == 1 || i == 2 || i == 3) + || v0 && i10 != 4 && i10 != 6 && i10 != 9 + || !v0 && f10 != 4 && f10 != 6 && f10 != 9) ? 'one' : 'other'; +}, + +tn: _cp[1], + +to: _cp[0], + +tr: _cp[1], + +ts: _cp[1], + +tzm: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return 'other'; + return ((n == 0 || n == 1) + || (t0 && n >= 11 && n <= 99)) ? 'one' : 'other'; +}, + +ug: _cp[1], + +uk: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return (n10 == 3 && n100 != 13) ? 'few' : 'other'; + return (v0 && i10 == 1 && i100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 + || i100 > 14)) ? 'few' + : (v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) + || v0 && (i100 >= 11 && i100 <= 14)) ? 'many' + : 'other'; +}, + +ur: _cp[3], + +uz: _cp[1], + +ve: _cp[1], + +vi: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return 'other'; +}, + +vo: _cp[1], + +vun: _cp[1], + +wa: _cp[2], + +wae: _cp[1], + +wo: _cp[0], + +xh: _cp[1], + +xog: _cp[1], + +yi: _cp[3], + +yo: _cp[0], + +yue: _cp[0], + +zh: _cp[0], + +zu: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +} +} diff --git a/make-plural.js b/make-plural.js new file mode 100644 index 0000000..577e70c --- /dev/null +++ b/make-plural.js @@ -0,0 +1,284 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.MakePlural = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + * + * 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() { + 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 Tests = function () { + function Tests(obj) { + _classCallCheck(this, Tests); + + this.obj = obj; + this.ordinal = {}; + this.cardinal = {}; + } + + _createClass(Tests, [{ + key: 'add', + value: function add(type, cat, src) { + this[type][cat] = { src: src, values: null }; + } + }, { + key: 'testCond', + value: function testCond(n, type, expResult, fn) { + try { + var r = (fn || this.obj.fn)(n, type === 'ordinal'); + } catch (e) { + r = e.toString(); + } + if (r !== expResult) { + throw new Error('Locale ' + JSON.stringify(this.obj.lc) + type + ' rule self-test failed for v = ' + JSON.stringify(n) + ' (was ' + JSON.stringify(r) + ', expected ' + JSON.stringify(expResult) + ')'); + } + return true; + } + }, { + key: 'testCat', + value: function testCat(type, cat, fn) { + var _this2 = this; + + var data = this[type][cat]; + if (!data.values) { + data.values = data.src.join(' ').replace(/^[ ,]+|[ ,…]+$/g, '').replace(/(0\.[0-9])~(1\.[1-9])/g, '$1 1.0 $2').split(/[ ,~…]+/); + } + data.values.forEach(function (n) { + _this2.testCond(n, type, cat, fn); + if (!/\.0+$/.test(n)) _this2.testCond(Number(n), type, cat, fn); + }); + return true; + } + }, { + key: 'testAll', + value: function testAll() { + for (var cat in this.cardinal) { + this.testCat('cardinal', cat); + }for (var _cat in this.ordinal) { + this.testCat('ordinal', _cat); + }return true; + } + }]); + + return Tests; +}(); + +var MakePlural = function () { + function MakePlural(lc) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : MakePlural, + cardinals = _ref.cardinals, + 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.tests = new Tests(this); + this.fn = this.buildFunction(cardinals, ordinals); + this.fn._obj = this; + this.fn.categories = this.categories; + this.fn.test = function () { + return this.tests.testAll() && this.fn; + }.bind(this); + this.fn.toString = this.fnToString.bind(this); + return this.fn; + } + + _createClass(MakePlural, [{ + key: 'compile', + value: function compile(type, req) { + var cases = []; + var rules = MakePlural.getRules(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*/), + _rules$r$trim$split2 = _toArray(_rules$r$trim$split), + cond = _rules$r$trim$split2[0], + examples = _rules$r$trim$split2.slice(1); + + var cat = r.replace('pluralRule-count-', ''); + if (cond) cases.push([this.parser.parse(cond), cat]); + this.tests.add(type, cat, examples); + } + 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)) : ''; + }; + var 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'); + } + }; + var cond = [ordinals && ['ordinal', !cardinals], cardinals && ['cardinal', true]].map(compile).map(fold.cond); + var body = [fold.vars(this.parser.vars())].concat(_toConsumableArray(cond)).filter(function (line) { + return !/^[\s;]*$/.test(line); + }).map(function (line) { + return line.replace(/\s+$/gm, ''); + }).join('\n'); + var args = ordinals && cardinals ? 'n, ord' : 'n'; + return new Function(args, body); // eslint-disable-line no-new-func + } + }, { + 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; + } + }, { + key: 'getRules', + value: function getRules(type, locale) { + if (locale.length) { + var cat = MakePlural.rules[type]; + if (locale in cat) return cat[locale]; + var lc0 = locale.toLowerCase(); + for (var lc in cat) { + if (lc.toLowerCase() === lc0) return cat[lc]; + } + } + return null; + } + }]); + + return MakePlural; +}(); + +exports.default = MakePlural; + + +MakePlural.cardinals = true; +MakePlural.ordinals = false; +MakePlural.rules = { cardinal: {}, ordinal: {} }; +module.exports = exports['default']; + +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/make-plural.min.js b/make-plural.min.js new file mode 100644 index 0000000..da7bd28 --- /dev/null +++ b/make-plural.min.js @@ -0,0 +1 @@ +!function(n){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).MakePlural=n()}}(function(){return function n(t,r,e){function i(a,u){if(!r[a]){if(!t[a]){var s="function"==typeof require&&require;if(!u&&s)return s(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var f=r[a]={exports:{}};t[a][0].call(f.exports,function(n){var r=t[a][1][n];return i(r||n)},f,f.exports,n,t,r,e)}return r[a].exports}for(var o="function"==typeof require&&require,a=0;a= 0 && n <= 1":"i = 0,1"===n?"n >= 0 && n < 2":"i = 1 and v = 0"===n?(this.v0=1,"n == 1 && v0"):n.replace(/([tv]) (!?)= 0/g,function(n,r,e){var i=r+"0";return t[i]=1,e?"!"+i:i}).replace(/\b[fintv]\b/g,function(n){return t[n]=1,n}).replace(/([fin]) % (10+)/g,function(n,r,e){var i=r+e;return t[i]=1,i}).replace(/n10+ = 0/g,"t0 && $&").replace(/(\w+ (!?)= )([0-9.]+,[0-9.,]+)/g,function(n,t,r,e){return"n = 0,1"===n?"(n == 0 || n == 1)":r?t+e.split(",").join(" && "+t):"("+t+e.split(",").join(" || "+t)+")"}).replace(/(\w+) (!?)= ([0-9]+)\.\.([0-9]+)/g,function(n,r,e,i,o){return Number(i)+1===Number(o)?e?r+" != "+i+" && "+r+" != "+o:"("+r+" == "+i+" || "+r+" == "+o+")":e?"("+r+" < "+i+" || "+r+" > "+o+")":"n"===r?(t.t0=1,"(t0 && n >= "+i+" && n <= "+o+")"):"("+r+" >= "+i+" && "+r+" <= "+o+")"}).replace(/ and /g," && ").replace(/ or /g," || ").replace(/ = /g," == ")}},{key:"vars",value:function(){var n=[];this.i&&n.push("i = s[0]"),(this.f||this.v)&&n.push("f = s[1] || ''"),this.t&&n.push("t = (s[1] || '').replace(/0+$/, '')"),this.v&&n.push("v = f.length"),this.v0&&n.push("v0 = !s[1]"),(this.t0||this.n10||this.n100)&&n.push("t0 = Number(s[0]) == n");for(var t in this)if(/^.10+$/.test(t)){var r="n"===t[0]?"t0 && s[0]":t[0];n.push(t+" = "+r+".slice(-"+t.substr(2).length+")")}return n.length?"var "+["s = String(n).split('.')"].concat(n).join(", "):""}}]),n}(),s=function(){function n(t){o(this,n),this.obj=t,this.ordinal={},this.cardinal={}}return a(n,[{key:"add",value:function(n,t,r){this[n][t]={src:r,values:null}}},{key:"testCond",value:function(n,t,r,e){try{var i=(e||this.obj.fn)(n,"ordinal"===t)}catch(n){i=n.toString()}if(i!==r)throw new Error("Locale "+JSON.stringify(this.obj.lc)+t+" rule self-test failed for v = "+JSON.stringify(n)+" (was "+JSON.stringify(i)+", expected "+JSON.stringify(r)+")");return!0}},{key:"testCat",value:function(n,t,r){var e=this,i=this[n][t];return i.values||(i.values=i.src.join(" ").replace(/^[ ,]+|[ ,…]+$/g,"").replace(/(0\.[0-9])~(1\.[1-9])/g,"$1 1.0 $2").split(/[ ,~…]+/)),i.values.forEach(function(i){e.testCond(i,n,t,r),/\.0+$/.test(i)||e.testCond(Number(i),n,t,r)}),!0}},{key:"testAll",value:function(){for(var n in this.cardinal)this.testCat("cardinal",n);for(var t in this.ordinal)this.testCat("ordinal",t);return!0}}]),n}(),l=function(){function n(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n,e=r.cardinals,i=r.ordinals;if(o(this,n),!e&&!i)throw new Error("At least one type of plural is required");return this.lc=t,this.categories={cardinal:[],ordinal:[]},this.parser=new u,this.tests=new s(this),this.fn=this.buildFunction(e,i),this.fn._obj=this,this.fn.categories=this.categories,this.fn.test=function(){return this.tests.testAll()&&this.fn}.bind(this),this.fn.toString=this.fnToString.bind(this),this.fn}return a(n,[{key:"compile",value:function(t,r){var o=[],a=n.getRules(t,this.lc);if(!a){if(r)throw new Error('Locale "'+this.lc+'" '+t+" rules not found");return this.categories[t]=["other"],"'other'"}for(var u in a){var s=i(a[u].trim().split(/\s*@\w*/)),l=s[0],f=s.slice(1),c=u.replace("pluralRule-count-","");l&&o.push([this.parser.parse(l),c]),this.tests.add(t,c,f)}return this.categories[t]=o.map(function(n){return n[1]}).concat("other"),1===o.length?"("+o[0][0]+") ? '"+o[0][1]+"' : 'other'":[].concat(e(o.map(function(n){return"("+n[0]+") ? '"+n[1]+"'"})),["'other'"]).join("\n : ")}},{key:"buildFunction",value:function(n,t){var r=this,i={vars:function(n){return(" "+n+";").replace(/(.{1,78})(,|$) ?/g,"$1$2\n ")},cond:function(n){return(" "+n+";").replace(/(.{1,78}) (\|\| |$) ?/gm,"$1\n $2")}},o=[t&&["ordinal",!n],n&&["cardinal",!0]].map(function(n){return n?(n[1]?"return ":"if (ord) return ")+r.compile.apply(r,e(n)):""}).map(i.cond),a=[i.vars(this.parser.vars())].concat(e(o)).filter(function(n){return!/^[\s;]*$/.test(n)}).map(function(n){return n.replace(/\s+$/gm,"")}).join("\n"),u=t&&n?"n, ord":"n";return new Function(u,a)}},{key:"fnToString",value:function(n){return Function.prototype.toString.call(this.fn).replace(/^function( \w+)?/,n?"function "+n:"function").replace(/\n\/\*(``)?\*\//,"")}}],[{key:"load",value:function(){for(var t=arguments.length,r=Array(t),e=0;e= 0 && n <= 1) ? 'one' : 'other'; +}, + +ar: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((n100 >= 3 && n100 <= 10)) ? 'few' + : ((n100 >= 11 && n100 <= 99)) ? 'many' + : 'other'; +}, + +ars: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((n100 >= 3 && n100 <= 10)) ? 'few' + : ((n100 >= 11 && n100 <= 99)) ? 'many' + : 'other'; +}, + +as: function(n, ord) { + if (ord) return ((n == 1 || n == 5 || n == 7 || n == 8 || n == 9 + || n == 10)) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +asa: _cp[1], + +ast: _cp[3], + +az: function(n, ord) { + var s = String(n).split('.'), i = s[0], i10 = i.slice(-1), + i100 = i.slice(-2), i1000 = i.slice(-3); + if (ord) return ((i10 == 1 || i10 == 2 || i10 == 5 || i10 == 7 || i10 == 8) + || (i100 == 20 || i100 == 50 || i100 == 70 + || i100 == 80)) ? 'one' + : ((i10 == 3 || i10 == 4) || (i1000 == 100 || i1000 == 200 + || i1000 == 300 || i1000 == 400 || i1000 == 500 || i1000 == 600 || i1000 == 700 + || i1000 == 800 + || i1000 == 900)) ? 'few' + : (i == 0 || i10 == 6 || (i100 == 40 || i100 == 60 + || i100 == 90)) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +be: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return ((n10 == 2 + || n10 == 3) && n100 != 12 && n100 != 13) ? 'few' : 'other'; + return (n10 == 1 && n100 != 11) ? 'one' + : ((n10 >= 2 && n10 <= 4) && (n100 < 12 + || n100 > 14)) ? 'few' + : (t0 && n10 == 0 || (n10 >= 5 && n10 <= 9) + || (n100 >= 11 && n100 <= 14)) ? 'many' + : 'other'; +}, + +bem: _cp[1], + +bez: _cp[1], + +bg: _cp[1], + +bh: _cp[2], + +bm: _cp[0], + +bn: function(n, ord) { + if (ord) return ((n == 1 || n == 5 || n == 7 || n == 8 || n == 9 + || n == 10)) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +bo: _cp[0], + +br: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), + n1000000 = t0 && s[0].slice(-6); + if (ord) return 'other'; + return (n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91) ? 'one' + : (n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92) ? 'two' + : (((n10 == 3 || n10 == 4) || n10 == 9) && (n100 < 10 + || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90 + || n100 > 99)) ? 'few' + : (n != 0 && t0 && n1000000 == 0) ? 'many' + : 'other'; +}, + +brx: _cp[1], + +bs: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +ca: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1]; + if (ord) return ((n == 1 + || n == 3)) ? 'one' + : (n == 2) ? 'two' + : (n == 4) ? 'few' + : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +ce: _cp[1], + +cgg: _cp[1], + +chr: _cp[1], + +ckb: _cp[1], + +cs: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1]; + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : ((i >= 2 && i <= 4) && v0) ? 'few' + : (!v0) ? 'many' + : 'other'; +}, + +cy: function(n, ord) { + if (ord) return ((n == 0 || n == 7 || n == 8 + || n == 9)) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((n == 3 + || n == 4)) ? 'few' + : ((n == 5 + || n == 6)) ? 'many' + : 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : (n == 2) ? 'two' + : (n == 3) ? 'few' + : (n == 6) ? 'many' + : 'other'; +}, + +da: function(n, ord) { + var s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n; + if (ord) return 'other'; + return (n == 1 || !t0 && (i == 0 + || i == 1)) ? 'one' : 'other'; +}, + +de: _cp[3], + +dsb: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i100 = i.slice(-2), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i100 == 1 + || f100 == 1) ? 'one' + : (v0 && i100 == 2 + || f100 == 2) ? 'two' + : (v0 && (i100 == 3 || i100 == 4) || (f100 == 3 + || f100 == 4)) ? 'few' + : 'other'; +}, + +dv: _cp[1], + +dz: _cp[0], + +ee: _cp[1], + +el: _cp[1], + +en: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return (n10 == 1 && n100 != 11) ? 'one' + : (n10 == 2 && n100 != 12) ? 'two' + : (n10 == 3 && n100 != 13) ? 'few' + : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +eo: _cp[1], + +es: _cp[1], + +et: _cp[3], + +eu: _cp[1], + +fa: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +ff: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +fi: _cp[3], + +fil: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), f10 = f.slice(-1); + if (ord) return (n == 1) ? 'one' : 'other'; + return (v0 && (i == 1 || i == 2 || i == 3) + || v0 && i10 != 4 && i10 != 6 && i10 != 9 + || !v0 && f10 != 4 && f10 != 6 && f10 != 9) ? 'one' : 'other'; +}, + +fo: _cp[1], + +fr: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +fur: _cp[1], + +fy: _cp[3], + +ga: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return (n == 1) ? 'one' : 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : ((t0 && n >= 3 && n <= 6)) ? 'few' + : ((t0 && n >= 7 && n <= 10)) ? 'many' + : 'other'; +}, + +gd: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return 'other'; + return ((n == 1 + || n == 11)) ? 'one' + : ((n == 2 + || n == 12)) ? 'two' + : (((t0 && n >= 3 && n <= 10) + || (t0 && n >= 13 && n <= 19))) ? 'few' + : 'other'; +}, + +gl: _cp[3], + +gsw: _cp[1], + +gu: function(n, ord) { + if (ord) return (n == 1) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +guw: _cp[2], + +gv: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1) ? 'one' + : (v0 && i10 == 2) ? 'two' + : (v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60 + || i100 == 80)) ? 'few' + : (!v0) ? 'many' + : 'other'; +}, + +ha: _cp[1], + +haw: _cp[1], + +he: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : (i == 2 && v0) ? 'two' + : (v0 && (n < 0 + || n > 10) && t0 && n10 == 0) ? 'many' + : 'other'; +}, + +hi: function(n, ord) { + if (ord) return (n == 1) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +hr: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +hsb: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i100 = i.slice(-2), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i100 == 1 + || f100 == 1) ? 'one' + : (v0 && i100 == 2 + || f100 == 2) ? 'two' + : (v0 && (i100 == 3 || i100 == 4) || (f100 == 3 + || f100 == 4)) ? 'few' + : 'other'; +}, + +hu: function(n, ord) { + if (ord) return ((n == 1 + || n == 5)) ? 'one' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +hy: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +id: _cp[0], + +ig: _cp[0], + +ii: _cp[0], + +"in": _cp[0], + +io: _cp[3], + +is: function(n, ord) { + var s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n, + i10 = i.slice(-1), i100 = i.slice(-2); + if (ord) return 'other'; + return (t0 && i10 == 1 && i100 != 11 + || !t0) ? 'one' : 'other'; +}, + +it: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1]; + if (ord) return ((n == 11 || n == 8 || n == 80 + || n == 800)) ? 'many' : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +iu: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +iw: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : (i == 2 && v0) ? 'two' + : (v0 && (n < 0 + || n > 10) && t0 && n10 == 0) ? 'many' + : 'other'; +}, + +ja: _cp[0], + +jbo: _cp[0], + +jgo: _cp[1], + +ji: _cp[3], + +jmc: _cp[1], + +jv: _cp[0], + +jw: _cp[0], + +ka: function(n, ord) { + var s = String(n).split('.'), i = s[0], i100 = i.slice(-2); + if (ord) return (i == 1) ? 'one' + : (i == 0 || ((i100 >= 2 && i100 <= 20) || i100 == 40 || i100 == 60 + || i100 == 80)) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +kab: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n < 2) ? 'one' : 'other'; +}, + +kaj: _cp[1], + +kcg: _cp[1], + +kde: _cp[0], + +kea: _cp[0], + +kk: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return (n10 == 6 || n10 == 9 + || t0 && n10 == 0 && n != 0) ? 'many' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +kkj: _cp[1], + +kl: _cp[1], + +km: _cp[0], + +kn: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +ko: _cp[0], + +ks: _cp[1], + +ksb: _cp[1], + +ksh: function(n, ord) { + if (ord) return 'other'; + return (n == 0) ? 'zero' + : (n == 1) ? 'one' + : 'other'; +}, + +ku: _cp[1], + +kw: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +ky: _cp[1], + +lag: function(n, ord) { + var s = String(n).split('.'), i = s[0]; + if (ord) return 'other'; + return (n == 0) ? 'zero' + : ((i == 0 + || i == 1) && n != 0) ? 'one' + : 'other'; +}, + +lb: _cp[1], + +lg: _cp[1], + +lkt: _cp[0], + +ln: _cp[2], + +lo: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return 'other'; +}, + +lt: function(n, ord) { + var s = String(n).split('.'), f = s[1] || '', t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n10 == 1 && (n100 < 11 + || n100 > 19)) ? 'one' + : ((n10 >= 2 && n10 <= 9) && (n100 < 11 + || n100 > 19)) ? 'few' + : (f != 0) ? 'many' + : 'other'; +}, + +lv: function(n, ord) { + var s = String(n).split('.'), f = s[1] || '', v = f.length, + t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), + n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1); + if (ord) return 'other'; + return (t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) + || v == 2 && (f100 >= 11 && f100 <= 19)) ? 'zero' + : (n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 + || v != 2 && f10 == 1) ? 'one' + : 'other'; +}, + +mas: _cp[1], + +mg: _cp[2], + +mgo: _cp[1], + +mk: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1); + if (ord) return (i10 == 1 && i100 != 11) ? 'one' + : (i10 == 2 && i100 != 12) ? 'two' + : ((i10 == 7 + || i10 == 8) && i100 != 17 && i100 != 18) ? 'many' + : 'other'; + return (v0 && i10 == 1 + || f10 == 1) ? 'one' : 'other'; +}, + +ml: _cp[1], + +mn: _cp[1], + +mo: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return (n == 1) ? 'one' : 'other'; + return (n == 1 && v0) ? 'one' + : (!v0 || n == 0 + || n != 1 && (n100 >= 1 && n100 <= 19)) ? 'few' + : 'other'; +}, + +mr: function(n, ord) { + if (ord) return (n == 1) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +}, + +ms: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return 'other'; +}, + +mt: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 0 + || (n100 >= 2 && n100 <= 10)) ? 'few' + : ((n100 >= 11 && n100 <= 19)) ? 'many' + : 'other'; +}, + +my: _cp[0], + +nah: _cp[1], + +naq: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +nb: _cp[1], + +nd: _cp[1], + +ne: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return ((t0 && n >= 1 && n <= 4)) ? 'one' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +nl: _cp[3], + +nn: _cp[1], + +nnh: _cp[1], + +no: _cp[1], + +nqo: _cp[0], + +nr: _cp[1], + +nso: _cp[2], + +ny: _cp[1], + +nyn: _cp[1], + +om: _cp[1], + +or: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return ((n == 1 || n == 5 + || (t0 && n >= 7 && n <= 9))) ? 'one' + : ((n == 2 + || n == 3)) ? 'two' + : (n == 4) ? 'few' + : (n == 6) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +os: _cp[1], + +pa: _cp[2], + +pap: _cp[1], + +pl: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 + || i100 > 14)) ? 'few' + : (v0 && i != 1 && (i10 == 0 || i10 == 1) + || v0 && (i10 >= 5 && i10 <= 9) + || v0 && (i100 >= 12 && i100 <= 14)) ? 'many' + : 'other'; +}, + +prg: function(n, ord) { + var s = String(n).split('.'), f = s[1] || '', v = f.length, + t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), + n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1); + if (ord) return 'other'; + return (t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) + || v == 2 && (f100 >= 11 && f100 <= 19)) ? 'zero' + : (n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 + || v != 2 && f10 == 1) ? 'one' + : 'other'; +}, + +ps: _cp[1], + +pt: function(n, ord) { + var s = String(n).split('.'), i = s[0]; + if (ord) return 'other'; + return ((i == 0 + || i == 1)) ? 'one' : 'other'; +}, + +"pt-PT": _cp[3], + +rm: _cp[1], + +ro: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n100 = t0 && s[0].slice(-2); + if (ord) return (n == 1) ? 'one' : 'other'; + return (n == 1 && v0) ? 'one' + : (!v0 || n == 0 + || n != 1 && (n100 >= 1 && n100 <= 19)) ? 'few' + : 'other'; +}, + +rof: _cp[1], + +root: _cp[0], + +ru: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 + || i100 > 14)) ? 'few' + : (v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) + || v0 && (i100 >= 11 && i100 <= 14)) ? 'many' + : 'other'; +}, + +rwk: _cp[1], + +sah: _cp[0], + +saq: _cp[1], + +sd: _cp[1], + +sdh: _cp[1], + +se: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +seh: _cp[1], + +ses: _cp[0], + +sg: _cp[0], + +sh: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +shi: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' + : ((t0 && n >= 2 && n <= 10)) ? 'few' + : 'other'; +}, + +si: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || ''; + if (ord) return 'other'; + return ((n == 0 || n == 1) + || i == 0 && f == 1) ? 'one' : 'other'; +}, + +sk: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1]; + if (ord) return 'other'; + return (n == 1 && v0) ? 'one' + : ((i >= 2 && i <= 4) && v0) ? 'few' + : (!v0) ? 'many' + : 'other'; +}, + +sl: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], i100 = i.slice(-2); + if (ord) return 'other'; + return (v0 && i100 == 1) ? 'one' + : (v0 && i100 == 2) ? 'two' + : (v0 && (i100 == 3 || i100 == 4) + || !v0) ? 'few' + : 'other'; +}, + +sma: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +smi: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +smj: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +smn: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +sms: function(n, ord) { + if (ord) return 'other'; + return (n == 1) ? 'one' + : (n == 2) ? 'two' + : 'other'; +}, + +sn: _cp[1], + +so: _cp[1], + +sq: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return (n == 1) ? 'one' + : (n10 == 4 && n100 != 14) ? 'many' + : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +sr: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2); + if (ord) return 'other'; + return (v0 && i10 == 1 && i100 != 11 + || f10 == 1 && f100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) + || (f10 >= 2 && f10 <= 4) && (f100 < 12 + || f100 > 14)) ? 'few' + : 'other'; +}, + +ss: _cp[1], + +ssy: _cp[1], + +st: _cp[1], + +sv: function(n, ord) { + var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + if (ord) return ((n10 == 1 + || n10 == 2) && n100 != 11 && n100 != 12) ? 'one' : 'other'; + return (n == 1 && v0) ? 'one' : 'other'; +}, + +sw: _cp[3], + +syr: _cp[1], + +ta: _cp[1], + +te: _cp[1], + +teo: _cp[1], + +th: _cp[0], + +ti: _cp[2], + +tig: _cp[1], + +tk: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1); + if (ord) return ((n10 == 6 || n10 == 9) + || n == 10) ? 'few' : 'other'; + return (n == 1) ? 'one' : 'other'; +}, + +tl: function(n, ord) { + var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], + i10 = i.slice(-1), f10 = f.slice(-1); + if (ord) return (n == 1) ? 'one' : 'other'; + return (v0 && (i == 1 || i == 2 || i == 3) + || v0 && i10 != 4 && i10 != 6 && i10 != 9 + || !v0 && f10 != 4 && f10 != 6 && f10 != 9) ? 'one' : 'other'; +}, + +tn: _cp[1], + +to: _cp[0], + +tr: _cp[1], + +ts: _cp[1], + +tzm: function(n, ord) { + var s = String(n).split('.'), t0 = Number(s[0]) == n; + if (ord) return 'other'; + return ((n == 0 || n == 1) + || (t0 && n >= 11 && n <= 99)) ? 'one' : 'other'; +}, + +ug: _cp[1], + +uk: function(n, ord) { + var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, + n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), i10 = i.slice(-1), + i100 = i.slice(-2); + if (ord) return (n10 == 3 && n100 != 13) ? 'few' : 'other'; + return (v0 && i10 == 1 && i100 != 11) ? 'one' + : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 + || i100 > 14)) ? 'few' + : (v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) + || v0 && (i100 >= 11 && i100 <= 14)) ? 'many' + : 'other'; +}, + +ur: _cp[3], + +uz: _cp[1], + +ve: _cp[1], + +vi: function(n, ord) { + if (ord) return (n == 1) ? 'one' : 'other'; + return 'other'; +}, + +vo: _cp[1], + +vun: _cp[1], + +wa: _cp[2], + +wae: _cp[1], + +wo: _cp[0], + +xh: _cp[1], + +xog: _cp[1], + +yi: _cp[3], + +yo: _cp[0], + +yue: _cp[0], + +zh: _cp[0], + +zu: function(n, ord) { + if (ord) return 'other'; + return (n >= 0 && n <= 1) ? 'one' : 'other'; +} +})); diff --git a/umd/plurals.min.js b/umd/plurals.min.js new file mode 100644 index 0000000..9742f64 --- /dev/null +++ b/umd/plurals.min.js @@ -0,0 +1 @@ +var _cp=[function(e,t){return"other"},function(e,t){return t?"other":1==e?"one":"other"},function(e,t){return t?"other":0==e||1==e?"one":"other"},function(e,t){var r=!String(e).split(".")[1];return t?"other":1==e&&r?"one":"other"}];!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t:e.plurals=t}(this,{af:_cp[1],ak:_cp[2],am:function(e,t){return t?"other":e>=0&&e<=1?"one":"other"},ar:function(e,t){var r=String(e).split("."),n=Number(r[0])==e&&r[0].slice(-2);return t?"other":0==e?"zero":1==e?"one":2==e?"two":n>=3&&n<=10?"few":n>=11&&n<=99?"many":"other"},ars:function(e,t){var r=String(e).split("."),n=Number(r[0])==e&&r[0].slice(-2);return t?"other":0==e?"zero":1==e?"one":2==e?"two":n>=3&&n<=10?"few":n>=11&&n<=99?"many":"other"},as:function(e,t){return t?1==e||5==e||7==e||8==e||9==e||10==e?"one":2==e||3==e?"two":4==e?"few":6==e?"many":"other":e>=0&&e<=1?"one":"other"},asa:_cp[1],ast:_cp[3],az:function(e,t){var r=String(e).split(".")[0],n=r.slice(-1),o=r.slice(-2),c=r.slice(-3);return t?1==n||2==n||5==n||7==n||8==n||20==o||50==o||70==o||80==o?"one":3==n||4==n||100==c||200==c||300==c||400==c||500==c||600==c||700==c||800==c||900==c?"few":0==r||6==n||40==o||60==o||90==o?"many":"other":1==e?"one":"other"},be:function(e,t){var r=String(e).split("."),n=Number(r[0])==e,o=n&&r[0].slice(-1),c=n&&r[0].slice(-2);return t?2!=o&&3!=o||12==c||13==c?"other":"few":1==o&&11!=c?"one":o>=2&&o<=4&&(c<12||c>14)?"few":n&&0==o||o>=5&&o<=9||c>=11&&c<=14?"many":"other"},bem:_cp[1],bez:_cp[1],bg:_cp[1],bh:_cp[2],bm:_cp[0],bn:function(e,t){return t?1==e||5==e||7==e||8==e||9==e||10==e?"one":2==e||3==e?"two":4==e?"few":6==e?"many":"other":e>=0&&e<=1?"one":"other"},bo:_cp[0],br:function(e,t){var r=String(e).split("."),n=Number(r[0])==e,o=n&&r[0].slice(-1),c=n&&r[0].slice(-2),i=n&&r[0].slice(-6);return t?"other":1==o&&11!=c&&71!=c&&91!=c?"one":2==o&&12!=c&&72!=c&&92!=c?"two":(3==o||4==o||9==o)&&(c<10||c>19)&&(c<70||c>79)&&(c<90||c>99)?"few":0!=e&&n&&0==i?"many":"other"},brx:_cp[1],bs:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-1),u=n.slice(-2),p=o.slice(-1),h=o.slice(-2);return t?"other":c&&1==i&&11!=u||1==p&&11!=h?"one":c&&i>=2&&i<=4&&(u<12||u>14)||p>=2&&p<=4&&(h<12||h>14)?"few":"other"},ca:function(e,t){var r=!String(e).split(".")[1];return t?1==e||3==e?"one":2==e?"two":4==e?"few":"other":1==e&&r?"one":"other"},ce:_cp[1],cgg:_cp[1],chr:_cp[1],ckb:_cp[1],cs:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1];return t?"other":1==e&&o?"one":n>=2&&n<=4&&o?"few":o?"other":"many"},cy:function(e,t){return t?0==e||7==e||8==e||9==e?"zero":1==e?"one":2==e?"two":3==e||4==e?"few":5==e||6==e?"many":"other":0==e?"zero":1==e?"one":2==e?"two":3==e?"few":6==e?"many":"other"},da:function(e,t){var r=String(e).split("."),n=r[0],o=Number(r[0])==e;return t?"other":1!=e&&(o||0!=n&&1!=n)?"other":"one"},de:_cp[3],dsb:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-2),u=o.slice(-2);return t?"other":c&&1==i||1==u?"one":c&&2==i||2==u?"two":c&&(3==i||4==i)||3==u||4==u?"few":"other"},dv:_cp[1],dz:_cp[0],ee:_cp[1],el:_cp[1],en:function(e,t){var r=String(e).split("."),n=!r[1],o=Number(r[0])==e,c=o&&r[0].slice(-1),i=o&&r[0].slice(-2);return t?1==c&&11!=i?"one":2==c&&12!=i?"two":3==c&&13!=i?"few":"other":1==e&&n?"one":"other"},eo:_cp[1],es:_cp[1],et:_cp[3],eu:_cp[1],fa:function(e,t){return t?"other":e>=0&&e<=1?"one":"other"},ff:function(e,t){return t?"other":e>=0&&e<2?"one":"other"},fi:_cp[3],fil:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-1),u=o.slice(-1);return t?1==e?"one":"other":c&&(1==n||2==n||3==n)||c&&4!=i&&6!=i&&9!=i||!c&&4!=u&&6!=u&&9!=u?"one":"other"},fo:_cp[1],fr:function(e,t){return t?1==e?"one":"other":e>=0&&e<2?"one":"other"},fur:_cp[1],fy:_cp[3],ga:function(e,t){var r=String(e).split("."),n=Number(r[0])==e;return t?1==e?"one":"other":1==e?"one":2==e?"two":n&&e>=3&&e<=6?"few":n&&e>=7&&e<=10?"many":"other"},gd:function(e,t){var r=String(e).split("."),n=Number(r[0])==e;return t?"other":1==e||11==e?"one":2==e||12==e?"two":n&&e>=3&&e<=10||n&&e>=13&&e<=19?"few":"other"},gl:_cp[3],gsw:_cp[1],gu:function(e,t){return t?1==e?"one":2==e||3==e?"two":4==e?"few":6==e?"many":"other":e>=0&&e<=1?"one":"other"},guw:_cp[2],gv:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1],c=n.slice(-1),i=n.slice(-2);return t?"other":o&&1==c?"one":o&&2==c?"two":!o||0!=i&&20!=i&&40!=i&&60!=i&&80!=i?o?"other":"many":"few"},ha:_cp[1],haw:_cp[1],he:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1],c=Number(r[0])==e,i=c&&r[0].slice(-1);return t?"other":1==e&&o?"one":2==n&&o?"two":o&&(e<0||e>10)&&c&&0==i?"many":"other"},hi:function(e,t){return t?1==e?"one":2==e||3==e?"two":4==e?"few":6==e?"many":"other":e>=0&&e<=1?"one":"other"},hr:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-1),u=n.slice(-2),p=o.slice(-1),h=o.slice(-2);return t?"other":c&&1==i&&11!=u||1==p&&11!=h?"one":c&&i>=2&&i<=4&&(u<12||u>14)||p>=2&&p<=4&&(h<12||h>14)?"few":"other"},hsb:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-2),u=o.slice(-2);return t?"other":c&&1==i||1==u?"one":c&&2==i||2==u?"two":c&&(3==i||4==i)||3==u||4==u?"few":"other"},hu:function(e,t){return t?1==e||5==e?"one":"other":1==e?"one":"other"},hy:function(e,t){return t?1==e?"one":"other":e>=0&&e<2?"one":"other"},id:_cp[0],ig:_cp[0],ii:_cp[0],in:_cp[0],io:_cp[3],is:function(e,t){var r=String(e).split("."),n=r[0],o=Number(r[0])==e,c=n.slice(-1),i=n.slice(-2);return t?"other":o&&1==c&&11!=i||!o?"one":"other"},it:function(e,t){var r=!String(e).split(".")[1];return t?11==e||8==e||80==e||800==e?"many":"other":1==e&&r?"one":"other"},iu:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},iw:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1],c=Number(r[0])==e,i=c&&r[0].slice(-1);return t?"other":1==e&&o?"one":2==n&&o?"two":o&&(e<0||e>10)&&c&&0==i?"many":"other"},ja:_cp[0],jbo:_cp[0],jgo:_cp[1],ji:_cp[3],jmc:_cp[1],jv:_cp[0],jw:_cp[0],ka:function(e,t){var r=String(e).split(".")[0],n=r.slice(-2);return t?1==r?"one":0==r||n>=2&&n<=20||40==n||60==n||80==n?"many":"other":1==e?"one":"other"},kab:function(e,t){return t?"other":e>=0&&e<2?"one":"other"},kaj:_cp[1],kcg:_cp[1],kde:_cp[0],kea:_cp[0],kk:function(e,t){var r=String(e).split("."),n=Number(r[0])==e,o=n&&r[0].slice(-1);return t?6==o||9==o||n&&0==o&&0!=e?"many":"other":1==e?"one":"other"},kkj:_cp[1],kl:_cp[1],km:_cp[0],kn:function(e,t){return t?"other":e>=0&&e<=1?"one":"other"},ko:_cp[0],ks:_cp[1],ksb:_cp[1],ksh:function(e,t){return t?"other":0==e?"zero":1==e?"one":"other"},ku:_cp[1],kw:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},ky:_cp[1],lag:function(e,t){var r=String(e).split(".")[0];return t?"other":0==e?"zero":0!=r&&1!=r||0==e?"other":"one"},lb:_cp[1],lg:_cp[1],lkt:_cp[0],ln:_cp[2],lo:function(e,t){return t&&1==e?"one":"other"},lt:function(e,t){var r=String(e).split("."),n=r[1]||"",o=Number(r[0])==e,c=o&&r[0].slice(-1),i=o&&r[0].slice(-2);return t?"other":1==c&&(i<11||i>19)?"one":c>=2&&c<=9&&(i<11||i>19)?"few":0!=n?"many":"other"},lv:function(e,t){var r=String(e).split("."),n=r[1]||"",o=n.length,c=Number(r[0])==e,i=c&&r[0].slice(-1),u=c&&r[0].slice(-2),p=n.slice(-2),h=n.slice(-1);return t?"other":c&&0==i||u>=11&&u<=19||2==o&&p>=11&&p<=19?"zero":1==i&&11!=u||2==o&&1==h&&11!=p||2!=o&&1==h?"one":"other"},mas:_cp[1],mg:_cp[2],mgo:_cp[1],mk:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-1),u=n.slice(-2),p=o.slice(-1);return t?1==i&&11!=u?"one":2==i&&12!=u?"two":7!=i&&8!=i||17==u||18==u?"other":"many":c&&1==i||1==p?"one":"other"},ml:_cp[1],mn:_cp[1],mo:function(e,t){var r=String(e).split("."),n=!r[1],o=Number(r[0])==e&&r[0].slice(-2);return t?1==e?"one":"other":1==e&&n?"one":!n||0==e||1!=e&&o>=1&&o<=19?"few":"other"},mr:function(e,t){return t?1==e?"one":2==e||3==e?"two":4==e?"few":"other":e>=0&&e<=1?"one":"other"},ms:function(e,t){return t&&1==e?"one":"other"},mt:function(e,t){var r=String(e).split("."),n=Number(r[0])==e&&r[0].slice(-2);return t?"other":1==e?"one":0==e||n>=2&&n<=10?"few":n>=11&&n<=19?"many":"other"},my:_cp[0],nah:_cp[1],naq:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},nb:_cp[1],nd:_cp[1],ne:function(e,t){var r=String(e).split("."),n=Number(r[0])==e;return t?n&&e>=1&&e<=4?"one":"other":1==e?"one":"other"},nl:_cp[3],nn:_cp[1],nnh:_cp[1],no:_cp[1],nqo:_cp[0],nr:_cp[1],nso:_cp[2],ny:_cp[1],nyn:_cp[1],om:_cp[1],or:function(e,t){var r=String(e).split("."),n=Number(r[0])==e;return t?1==e||5==e||n&&e>=7&&e<=9?"one":2==e||3==e?"two":4==e?"few":6==e?"many":"other":1==e?"one":"other"},os:_cp[1],pa:_cp[2],pap:_cp[1],pl:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1],c=n.slice(-1),i=n.slice(-2);return t?"other":1==e&&o?"one":o&&c>=2&&c<=4&&(i<12||i>14)?"few":o&&1!=n&&(0==c||1==c)||o&&c>=5&&c<=9||o&&i>=12&&i<=14?"many":"other"},prg:function(e,t){var r=String(e).split("."),n=r[1]||"",o=n.length,c=Number(r[0])==e,i=c&&r[0].slice(-1),u=c&&r[0].slice(-2),p=n.slice(-2),h=n.slice(-1);return t?"other":c&&0==i||u>=11&&u<=19||2==o&&p>=11&&p<=19?"zero":1==i&&11!=u||2==o&&1==h&&11!=p||2!=o&&1==h?"one":"other"},ps:_cp[1],pt:function(e,t){var r=String(e).split(".")[0];return t?"other":0==r||1==r?"one":"other"},"pt-PT":_cp[3],rm:_cp[1],ro:function(e,t){var r=String(e).split("."),n=!r[1],o=Number(r[0])==e&&r[0].slice(-2);return t?1==e?"one":"other":1==e&&n?"one":!n||0==e||1!=e&&o>=1&&o<=19?"few":"other"},rof:_cp[1],root:_cp[0],ru:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1],c=n.slice(-1),i=n.slice(-2);return t?"other":o&&1==c&&11!=i?"one":o&&c>=2&&c<=4&&(i<12||i>14)?"few":o&&0==c||o&&c>=5&&c<=9||o&&i>=11&&i<=14?"many":"other"},rwk:_cp[1],sah:_cp[0],saq:_cp[1],sd:_cp[1],sdh:_cp[1],se:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},seh:_cp[1],ses:_cp[0],sg:_cp[0],sh:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-1),u=n.slice(-2),p=o.slice(-1),h=o.slice(-2);return t?"other":c&&1==i&&11!=u||1==p&&11!=h?"one":c&&i>=2&&i<=4&&(u<12||u>14)||p>=2&&p<=4&&(h<12||h>14)?"few":"other"},shi:function(e,t){var r=String(e).split("."),n=Number(r[0])==e;return t?"other":e>=0&&e<=1?"one":n&&e>=2&&e<=10?"few":"other"},si:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"";return t?"other":0==e||1==e||0==n&&1==o?"one":"other"},sk:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1];return t?"other":1==e&&o?"one":n>=2&&n<=4&&o?"few":o?"other":"many"},sl:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1],c=n.slice(-2);return t?"other":o&&1==c?"one":o&&2==c?"two":o&&(3==c||4==c)||!o?"few":"other"},sma:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},smi:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},smj:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},smn:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},sms:function(e,t){return t?"other":1==e?"one":2==e?"two":"other"},sn:_cp[1],so:_cp[1],sq:function(e,t){var r=String(e).split("."),n=Number(r[0])==e,o=n&&r[0].slice(-1),c=n&&r[0].slice(-2);return t?1==e?"one":4==o&&14!=c?"many":"other":1==e?"one":"other"},sr:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-1),u=n.slice(-2),p=o.slice(-1),h=o.slice(-2);return t?"other":c&&1==i&&11!=u||1==p&&11!=h?"one":c&&i>=2&&i<=4&&(u<12||u>14)||p>=2&&p<=4&&(h<12||h>14)?"few":"other"},ss:_cp[1],ssy:_cp[1],st:_cp[1],sv:function(e,t){var r=String(e).split("."),n=!r[1],o=Number(r[0])==e,c=o&&r[0].slice(-1),i=o&&r[0].slice(-2);return t?1!=c&&2!=c||11==i||12==i?"other":"one":1==e&&n?"one":"other"},sw:_cp[3],syr:_cp[1],ta:_cp[1],te:_cp[1],teo:_cp[1],th:_cp[0],ti:_cp[2],tig:_cp[1],tk:function(e,t){var r=String(e).split("."),n=Number(r[0])==e&&r[0].slice(-1);return t?6==n||9==n||10==e?"few":"other":1==e?"one":"other"},tl:function(e,t){var r=String(e).split("."),n=r[0],o=r[1]||"",c=!r[1],i=n.slice(-1),u=o.slice(-1);return t?1==e?"one":"other":c&&(1==n||2==n||3==n)||c&&4!=i&&6!=i&&9!=i||!c&&4!=u&&6!=u&&9!=u?"one":"other"},tn:_cp[1],to:_cp[0],tr:_cp[1],ts:_cp[1],tzm:function(e,t){var r=String(e).split("."),n=Number(r[0])==e;return t?"other":0==e||1==e||n&&e>=11&&e<=99?"one":"other"},ug:_cp[1],uk:function(e,t){var r=String(e).split("."),n=r[0],o=!r[1],c=Number(r[0])==e,i=c&&r[0].slice(-1),u=c&&r[0].slice(-2),p=n.slice(-1),h=n.slice(-2);return t?3==i&&13!=u?"few":"other":o&&1==p&&11!=h?"one":o&&p>=2&&p<=4&&(h<12||h>14)?"few":o&&0==p||o&&p>=5&&p<=9||o&&h>=11&&h<=14?"many":"other"},ur:_cp[3],uz:_cp[1],ve:_cp[1],vi:function(e,t){return t&&1==e?"one":"other"},vo:_cp[1],vun:_cp[1],wa:_cp[2],wae:_cp[1],wo:_cp[0],xh:_cp[1],xog:_cp[1],yi:_cp[3],yo:_cp[0],yue:_cp[0],zh:_cp[0],zu:function(e,t){return t?"other":e>=0&&e<=1?"one":"other"}}); \ No newline at end of file