@phensley/plurals
TypeScript icon, indicating that this package has built-in type declarations

1.8.0 • Public • Published

@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

Readme

Keywords

none

Package Sidebar

Install

npm i @phensley/plurals

Weekly Downloads

830

Version

1.8.0

License

Apache-2.0

Unpacked Size

262 kB

Total Files

45

Last publish

Collaborators

  • phensley