or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cardinal-pluralization.mdcore-pluralization.mdexample-values.mdindex.mdordinal-pluralization.mdplural-categories.mdrange-pluralization.md
tile.json

tessl/npm-make-plural

Unicode CLDR pluralization rules as JavaScript functions for internationalization applications

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/make-plural@7.4.x

To install, run

npx @tessl/cli install tessl/npm-make-plural@7.4.0

index.mddocs/

make-plural

make-plural provides pre-compiled JavaScript functions for determining pluralization categories according to Unicode CLDR rules for approximately 200 languages. It supports both cardinal plurals (e.g., "one book", "two books") and ordinal plurals (e.g., "1st book", "2nd book") with no runtime dependencies and tree shaking support for optimal bundle sizes.

Package Information

  • Package Name: make-plural
  • Package Type: npm
  • Language: JavaScript/TypeScript
  • Installation: npm install make-plural

Core Imports

import { en, fr, ar } from "make-plural";

For specific modules:

import { en, fr } from "make-plural/cardinals";
import { en } from "make-plural/ordinals";
import * as Categories from "make-plural/pluralCategories";
import * as Examples from "make-plural/examples";
import { en, ro } from "make-plural/ranges";

CommonJS:

const { en, fr, ar } = require("make-plural");

Basic Usage

import { en, fr, ar } from "make-plural";

// Cardinal pluralization
en(1);        // 'one'
en(2);        // 'other'
fr(0);        // 'one' (French treats 0 as singular)
fr(2);        // 'many'

// Ordinal pluralization 
en(1, true);  // 'one' (1st)
en(2, true);  // 'two' (2nd)
en(3, true);  // 'few' (3rd)
en(4, true);  // 'other' (4th)

// Complex pluralization (Arabic has 6 categories)
ar(0);        // 'zero'
ar(1);        // 'one' 
ar(2);        // 'two'
ar(3);        // 'few'
ar(11);       // 'many'
ar(100);      // 'other'

Architecture

make-plural is organized around several key modules:

  • Plurals Module: Main entry point with combined cardinal and ordinal functions (217 languages)
  • Cardinals Module: Cardinal-only functions for memory efficiency (217 languages)
  • Ordinals Module: Ordinal-only functions for languages with ordinal rules (103 languages)
  • Categories Module: Metadata showing available plural categories per language
  • Examples Module: Sample numeric values demonstrating each category
  • Ranges Module: Functions for pluralizing numerical ranges (91 languages)

All functions are pre-compiled for maximum performance with no runtime dependencies.

Capabilities

Core Pluralization

Primary pluralization functions that determine plural categories for cardinal and ordinal numbers across 217 languages.

type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";

// Main pluralization function signature (all language functions)
(n: number | string, ord?: boolean) => PluralCategory;

Core Pluralization

Cardinal Pluralization

Cardinal-only pluralization functions optimized for when ordinal pluralization is not needed.

// Cardinal-only function signature
(n: number | string) => PluralCategory;

Cardinal Pluralization

Ordinal Pluralization

Ordinal-only pluralization functions for languages that have specific ordinal rules.

// Ordinal-only function signature
(n: number | string) => PluralCategory;

Ordinal Pluralization

Plural Categories

Metadata about available plural categories for each language, including both cardinal and ordinal categories.

interface LanguageCategories {
  cardinal: PluralCategory[];
  ordinal: PluralCategory[];
}

Plural Categories

Example Values

Sample numeric values that demonstrate each plural category for every supported language.

interface LanguageExamples {
  cardinal: Record<PluralCategory, string[]>;
  ordinal: Record<PluralCategory, string[]>;
}

Example Values

Range Pluralization

Functions for determining the pluralization of numerical ranges (e.g., "1-5 items").

// Range function signature
(start: PluralCategory, end: PluralCategory) => PluralCategory;

Range Pluralization

Types

/** All possible CLDR plural categories */
type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";

/** Language category metadata */
interface LanguageCategories {
  cardinal: PluralCategory[];
  ordinal: PluralCategory[];
}

/** Language example values */
interface LanguageExamples {
  cardinal: Record<PluralCategory, string[]>;
  ordinal: Record<PluralCategory, string[]>;
}