CLDR Plural Rules — Welsh (6 categories)
Welsh CLDR cardinal and ordinal plural rules with the exact integer samples that select each category, the equivalent gettext Plural-Forms expression, and a note on the trap the language exposes: welsh is the only cldr locale using all six categories for both cardinals and ordinals, and its categories are enumerations (3, 6) rather than modulo ranges — a rule engine that assumes 'few' means a range fails here.
{
"locale": "cy",
"language": "Welsh",
"source": "CLDR plural rules",
"note": "Rule expressions use CLDR plural-rule syntax: n is the absolute value of the source number, i its integer digits and v the count of visible fraction digits. Categories are selected by the FIRST matching rule; 'other' is always the fallback. Assert on the category returned for each sample value, not on any wording.",
"categories": [
"zero",
"one",
"two",
"few",
"many",
"other"
],
"cardinal": {
"zero": "n = 0",
"one": "n = 1",
"two": "n = 2",
"few": "n = 3",
"many": "n = 6",
"other": "(default — everything the rules above do not match)"
},
"cardinalSamples": {
"zero": [
0
],
"one": [
1
],
"two": [
2
],
"few": [
3
],
"many": [
6
],
"other": [
4,
5,
7,
8,
9,
10,
100,
1.5
]
},
"ordinal": {
"zero": "n = 0,7,8,9",Specifications
- Locale
- cy
- Language
- Welsh
- Cardinal Categories
- 6
- Categories
- zero, one, two, few, many, other
- Has Ordinal Categories
- 6
- Gettext Nplurals
- 6
- Seed
- 20260807
- Wave
- p7
- Line Endings
- LF
Testing contract
Reference control- Scenario
- Run every value in `cardinalSamples` and `ordinalSamples` through a plural engine configured for cy.
- Expected result
- Each value returns the category it is filed under — 6 distinct cardinal categories for cy, with 'other' as the fallback.
What is a .json file?
JSON (JavaScript Object Notation) is a lightweight, text-based data-interchange format representing objects, arrays, strings, numbers, booleans, and null. It is language-independent, human-readable, and the dominant format for web APIs and configuration. It requires a single well-formed root value.
How to use this file
Use an example JSON file to test parsers and serializers, schema validation, Unicode and number-precision handling, and API request or response processing.
How to use this file for testing
“CLDR Plural Rules — Welsh (6 categories)” is a deterministic Novus Examples fixture for Internationalization, Localization catalogs, JSON parsing. Parallel text and accented, multi-script content — for testing translation pipelines, Unicode handling, and localization tooling.
Documented properties for this file: seed 20260807 · Welsh · LF. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Translation-catalog fixtures carry the same message set across formats, each with its native placeholder syntax. Test your i18n loader, catalog converter, or translation-memory tool, and use the RTL and CJK variants to check bidirectional text and Unicode handling.
Load the catalog with your i18n framework and verify placeholder interpolation and plural handling; the RTL and CJK variants exercise bidirectional text and font fallback.
Code examples
import json
with open("plural-rules-cy.json") as f:
data = json.load(f)
print(type(data), len(data))Related files
- jsonBidi Isolates — UI templates for user-supplied namesThree notification templates in English, Arabic and Hebrew, each given raw and with every interpolation slot wrapped in FSI…PDI, plus four argument sets covering an LTR name in an RTL sentence, an RTL name in an LTR sentence and a name beginning with a neutral character. This is the fixture for the bug where a display name reorders the sentence around it.

- arbFlutter ARB — ICU plurals and typed placeholders (Arabic)A Arabic ARB whose plural messages carry an ICU branch for each of the 6 categories ar selects, plus a select message and a summary line with typed placeholders — int with compactLong, and a DateTime with a yMMMd format — which is what makes gen_l10n emit a typed Dart method rather than a plain string.

- arbFlutter ARB — ICU plurals and typed placeholders (English)A English ARB whose plural messages carry an ICU branch for each of the 2 categories en selects, plus a select message and a summary line with typed placeholders — int with compactLong, and a DateTime with a yMMMd format — which is what makes gen_l10n emit a typed Dart method rather than a plain string.

- arbFlutter ARB — ICU plurals and typed placeholders (Polish)A Polish ARB whose plural messages carry an ICU branch for each of the 4 categories pl selects, plus a select message and a summary line with typed placeholders — int with compactLong, and a DateTime with a yMMMd format — which is what makes gen_l10n emit a typed Dart method rather than a plain string.

- arbFlutter ARB — ICU plurals and typed placeholders (Welsh)A Welsh ARB whose plural messages carry an ICU branch for each of the 6 categories cy selects, plus a select message and a summary line with typed placeholders — int with compactLong, and a DateTime with a yMMMd format — which is what makes gen_l10n emit a typed Dart method rather than a plain string.

- jsonICU MessageFormat — Nested select/plural (Arabic)Arabic ICU MessageFormat catalog whose messages nest a select inside a plural branch and a plural inside a select branch, shipped with the argument bindings and the exact output each one must produce. Includes the '#' binding trap: inside a nested plural, '#' refers to the inner argument, so the outer count is written explicitly.

Generated by generation/localization_p7.py. Free for any use, no attribution required — license.