Skip to content

CLDR pluralization with interpolations#418

Draft
K1DV5 wants to merge 4 commits into
mainfrom
cldr-plurals
Draft

CLDR pluralization with interpolations#418
K1DV5 wants to merge 4 commits into
mainfrom
cldr-plurals

Conversation

@K1DV5

@K1DV5 K1DV5 commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator

The current pluralization implementation requires the language rules to be defined and stored in the catalogs. While that could make it independent, it requires too much special handling to keep it working and maintain the rules storage alongside the items. Considering the fact that the rules for 100+ languages are already provided by almost all popular JS runtime environments through the Intl API, maintaining a parallel implementation makes even less sense.

The challenge was that the Intl API works with CLDR categories instead of straight indices. And that was considered to be too verbose to use (plural(days, {one: 'a day', many: '# days'}) vs plural(days, ['a day', '# days'])) and couldn't be directly mapped to PO file items. But it can be solved by keeping a consistent order of the categories and leveraging Intl at decision time.

In addition, this implements support for template literal candidates (which are not currently supported #406). And also solves the problem that all messages were stored in an array and the length was used to detect plurals, which could create problems when the source language only has one plural form (e.g. Japanese), and it now uses arrays for plurals and strings for singulars.

@changeset-bot

changeset-bot Bot commented Jul 12, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 335a53c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 5 packages
Name Type
@wuchale/json Minor
wuchale Minor
@wuchale/svelte Minor
@wuchale/astro Minor
@wuchale/jsx Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant