Skip to content

Pluralization ​

Pluralization is done with function message leafs plus the plural(...) helper.

This gives you full type safety and uses the browser’s Intl.PluralRules under the hood.

How it works ​

  • Define a message as a function. Its single parameter p will always include locale: string (injected by the core).
  • Include either n: number or count: number in p. plural(p, …) will read that value.
  • Call plural(p, selectors, options?) to select the correct variant based on Intl.PluralRules.

INFO

You don’t need to declare locale in the function signature. It’s provided automatically. Do include n or count, as one of these is required by plural(...).

ts
// can be imported from any wrapper as well
import { plural } from "@ardinsys/intl";

const en = {
  messages: {
    // cardinal example
    itemCount: (p: { n: number }) =>
      plural(p, {
        one: "There is ${p.n} item",
        other: "There are ${p.n} items",
      }),

    // ordinal example
    placement: (p: { n: number }) =>
      plural(
        p,
        {
          one: `${p.n}st`,
          two: `${p.n}nd`,
          few: `${p.n}rd`,
          other: `${p.n}th`,
        },
        { type: "ordinal" }
      ),
  },
} as const;

Using it ​

ts
const { t } = useIntl({ en } as const);

t("itemCount", { n: 1 }); // "There is 1 item"
t("itemCount", { n: 3 }); // "There are 3 items"

t("placement", { n: 1 }); // "1st"
t("placement", { n: 2 }); // "2nd"
t("placement", { n: 4 }); // "4th"
t("placement", { n: 21 }); // "21st"

Released under the Apache 2 License.