1.8.1 • Published 19 days ago

@phensley/plurals v1.8.1

Weekly downloads
251
License
Apache-2.0
Repository
github
Last release
19 days ago

@phensley/timezone

@phensley/plurals min+gzip

Standalone CLDR plural rules engine. Supports cardinal, ordinal, and plural range calculations. Also supports arbitrary precision decimal numbers.

Installation

NPM:

npm install --save @phensley/plurals

Yarn:

yarn add @phensley/plurals

Examples

The plural rules engine takes 2 parameters as input: an ISO 639 language code and a number. The number can be a Decimal, number, or a string containing a valid number.

The Decimal arbitrary precision type is used for evaluating the plural expressions internally.

import { Decimal } from '@phensley/decimal';
import { pluralRules } from '@phensley/plurals';

const LANGUAGES = ['en', 'fr', 'lt', 'pl', 'mt'];
const NUMBERS = [
  '1e-30',
  '0.3333333333e-15',
  0,
  '0.00',
  0.5,
  1,
  '1.0',
  2,
  '3.14159',
  5,
  6,
  7,
  9,
  11,
  15,
  19,
  23,
  29,
  '100',
  '1000000000000',
  '1000000000000.0',
  '9999999999999999999999919',
  '9999999999999999999999999',
  '1e30'
];

let s = '';
for (const n of NUMBERS) {
  s += `${new Decimal(n).toString().padStart(35)}  `;
  for (const lang of LANGUAGES) {
    const plurals = pluralRules.get(lang);
    const cat = plurals.cardinal(n);
    s += `${lang} ${cat}`.padEnd(14);
  }
  s += '\n';
}
console.log(s);
   0.000000000000000000000000000001  en other      fr one        lt many       pl other      mt other      pt one        pt-PT other
        0.0000000000000003333333333  en other      fr one        lt many       pl other      mt other      pt one        pt-PT other
                                  0  en other      fr one        lt other      pl many       mt few        pt one        pt-PT other
                               0.00  en other      fr one        lt other      pl other      mt few        pt one        pt-PT other
                                0.5  en other      fr one        lt many       pl other      mt other      pt one        pt-PT other
                                  1  en one        fr one        lt one        pl one        mt one        pt one        pt-PT one
                                1.0  en other      fr one        lt one        pl other      mt one        pt one        pt-PT other
                                  2  en other      fr other      lt few        pl few        mt few        pt other      pt-PT other
                            3.14159  en other      fr other      lt many       pl other      mt other      pt other      pt-PT other
                                  5  en other      fr other      lt few        pl many       mt few        pt other      pt-PT other
                                  6  en other      fr other      lt few        pl many       mt few        pt other      pt-PT other
                                  7  en other      fr other      lt few        pl many       mt few        pt other      pt-PT other
                                  9  en other      fr other      lt few        pl many       mt few        pt other      pt-PT other
                                 11  en other      fr other      lt other      pl many       mt many       pt other      pt-PT other
                                 15  en other      fr other      lt other      pl many       mt many       pt other      pt-PT other
                                 19  en other      fr other      lt other      pl many       mt many       pt other      pt-PT other
                                 23  en other      fr other      lt few        pl few        mt other      pt other      pt-PT other
                                 29  en other      fr other      lt few        pl many       mt other      pt other      pt-PT other
                                100  en other      fr other      lt other      pl many       mt other      pt other      pt-PT other
                      1000000000000  en other      fr other      lt other      pl many       mt other      pt other      pt-PT other
                    1000000000000.0  en other      fr other      lt other      pl other      mt other      pt other      pt-PT other
          9999999999999999999999919  en other      fr other      lt other      pl many       mt many       pt other      pt-PT other
          9999999999999999999999999  en other      fr other      lt few        pl many       mt other      pt other      pt-PT other
    1000000000000000000000000000000  en other      fr other      lt other      pl many       mt other      pt other      pt-PT other
1.8.1

19 days ago

1.8.0

6 months ago

1.2.16

7 months ago

1.7.3

7 months ago

1.7.2

11 months ago

1.7.1

11 months ago

1.7.0

12 months ago

1.2.14

1 year ago

1.2.15

1 year ago

1.6.6

1 year ago

1.6.5

1 year ago

1.6.4

2 years ago

1.2.12

2 years ago

1.2.13

2 years ago

1.6.3

2 years ago

1.6.2

2 years ago

1.6.1

2 years ago

1.6.0

2 years ago

1.2.11

2 years ago

1.5.2

2 years ago

1.5.1

2 years ago

1.5.0

2 years ago

1.4.1

2 years ago

1.4.0

3 years ago

1.2.10

3 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.2.9

3 years ago

1.2.8

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.7

3 years ago

1.2.6

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

0.26.0

4 years ago

0.25.22

4 years ago

0.25.21

4 years ago

0.25.19

4 years ago

0.25.20

4 years ago

0.25.18

4 years ago

0.25.17

4 years ago

0.25.16

4 years ago

0.25.15

4 years ago

0.25.14

4 years ago

0.25.13

4 years ago

0.25.12

4 years ago

0.25.11

4 years ago

0.25.10

4 years ago

0.25.9

4 years ago

0.25.8

4 years ago

0.25.7

4 years ago

0.25.6

4 years ago

0.25.5

4 years ago

0.25.4

4 years ago

0.25.3

4 years ago

0.25.2

4 years ago

0.25.1

4 years ago

0.25.0

4 years ago

0.24.0

4 years ago

0.23.0

5 years ago

0.22.3

5 years ago

0.22.2

5 years ago

0.22.1

5 years ago

0.22.0

5 years ago

0.21.2

5 years ago

0.21.1

5 years ago

0.21.0

5 years ago

0.20.4

5 years ago

0.20.3

5 years ago

0.20.2

5 years ago

0.20.1

5 years ago

0.20.0

5 years ago