CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-make-plural

Unicode CLDR pluralization rules as JavaScript functions for internationalization applications

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

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[]>;
}

docs

cardinal-pluralization.md

core-pluralization.md

example-values.md

index.md

ordinal-pluralization.md

plural-categories.md

range-pluralization.md

tile.json