Android <plurals> — Welsh (6 quantities)
Welsh Android quantity strings: 4 <plurals> blocks with an <item> for each of the 6 CLDR quantities cy actually selects. Rename to plurals.xml and drop into res/values-cy/ to use it as-is.
<?xml version="1.0" encoding="utf-8"?>
<!-- Novus example app - Welsh (cy) quantity strings.
Install at res/values-cy/plurals.xml.
Android resolves <plurals> through the CLDR rules for the resource folder's locale,
NOT through the numbers in the item text: getQuantityString(R.plurals.files, 2)
returns the "few" item in values-pl/ and the "other" item in values/. A quantity
the locale never selects is legal and simply dead — English never selects "zero",
"two", "few" or "many", which is why the default folder below carries only two items.
Categories used by cy: zero, one, two, few, many, other. -->
<resources>
<!-- Item count in the status bar -->
<plurals name="files">
<item quantity="zero">%1$d ffeil</item>
<item quantity="one">%1$d ffeil</item>
<item quantity="two">%1$d ffeil</item>
<item quantity="few">%1$d ffeil</item>
<item quantity="many">%1$d ffeil</item>
<item quantity="other">%1$d ffeil</item>
</plurals>
<!-- Selection summary -->
<plurals name="folders_selected">
<item quantity="zero">Dewiswyd %1$d ffolder</item>
<item quantity="one">Dewiswyd %1$d ffolder</item>
<item quantity="two">Dewiswyd %1$d ffolder</item>
<item quantity="few">Dewiswyd %1$d ffolder</item>
<item quantity="many">Dewiswyd %1$d ffolder</item>
<item quantity="other">Dewiswyd %1$d ffolder</item>
</plurals>
<!-- Undo toast after a delete -->
<plurals name="deleted_items">
<item quantity="zero">Dilewyd %1$d eitem</item>
<item quantity="one">Dilewyd %1$d eitem</item>
<item quantity="two">Dilewyd %1$d eitem</item>
<item quantity="few">Dilewyd %1$d eitem</item>
<item quantity="many">Dilewyd %1$d eitem</item>
<item quantity="other">Dilewyd %1$d eitem</item>
</plurals>
<!-- Demo string chosen to show Welsh consonant mutation -->
<plurals name="cats">
<item quantity="zero">%1$d cath</item>
<item quantity="one">%1$d gath</item>
<item quantity="two">%1$d gath</item>
<item quantity="few">%1$d cath</item>
<item quantity="many">%1$d chath</item>
<item quantity="other">%1$d cath</item>
</plurals>
</resources>
Specifications
- Format
- Android string resources
- Locale
- cy
- Resource Directory
- res/values-cy/
- Canonical Name
- plurals.xml
- Plurals Blocks
- 4
- Quantities
- zero, one, two, few, many, other
- Placeholder
- %1$d (positional)
- Seed
- 20260807
- Wave
- p7
- Line Endings
- LF
Testing contract
Expected to pass- Scenario
- Call getQuantityString() with counts spanning every category and compare against the cy CLDR rules.
- Expected result
- Android picks the item by the resource folder's CLDR rules, not by the digits in the text: the same count maps to different quantities in different folders, and a quantity the locale never selects is dead resource rather than an error.
What is a .xml file?
XML (Extensible Markup Language) is a verbose, self-describing markup language using nested tags, attributes, and namespaces to represent structured, hierarchical data. It supports schemas, entities, and validation and underlies many document and data formats. It remains common in enterprise, publishing, and interchange contexts.
How to use this file
Use an example XML file to test parsers, namespace and schema validation, XPath queries, and protection against entity-expansion and external-entity attacks.
How to use this file for testing
“Android <plurals> — Welsh (6 quantities)” is a deterministic Novus Examples fixture for Internationalization, Localization catalogs. Parallel text and accented, multi-script content — for testing translation pipelines, Unicode handling, and localization tooling.
Documented properties for this file: seed 20260807 · LF · placeholder %1$d (positional). 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 xml.etree.ElementTree as ET
tree = ET.parse("plurals-cy.xml")
root = tree.getroot()
print(root.tag, [c.tag for c in root][:5])Related files
- xmlAndroid strings.xml — EnglishAn Android values/strings.xml (English) with string resources, a <plurals> block, and a <string-array>, using positional %1$s placeholders — the res/values/ default catalog.

- xmlAndroid strings.xml — escaping, xliff:g and markup rulesEvery escaping rule aapt2 enforces on a strings.xml, in one file: backslash-escaped apostrophes and quotes, quoted values that preserve leading whitespace, an escaped @ and ?, CDATA-wrapped inline HTML, <xliff:g> placeholder protection with examples, formatted="false", translatable="false" and a scoped tools:ignore.

- xmlAndroid strings.xml — SpanishThe Spanish Android strings.xml (as res/values-es/) — for testing Android resource parsers, plurals, and string-array localization.

- resx.NET RESX — composite format strings (Arabic (Egypt))A Arabic (Egypt) resource file built around composite format strings — {0:N2}, {2:P1}, {0:C}, {0:d} and {0:t} — whose rendered output depends entirely on CultureInfo. Includes a whitespace-significant resource guarded by xml:space, and documents the suffixed-key convention .NET falls back on because String.Format has no plural selector.

- resx.NET RESX — composite format strings (English (United States))A English (United States) resource file built around composite format strings — {0:N2}, {2:P1}, {0:C}, {0:d} and {0:t} — whose rendered output depends entirely on CultureInfo. Includes a whitespace-significant resource guarded by xml:space, and documents the suffixed-key convention .NET falls back on because String.Format has no plural selector.

- resx.NET RESX — composite format strings (German (Germany))A German (Germany) resource file built around composite format strings — {0:N2}, {2:P1}, {0:C}, {0:d} and {0:t} — whose rendered output depends entirely on CultureInfo. Includes a whitespace-significant resource guarded by xml:space, and documents the suffixed-key convention .NET falls back on because String.Format has no plural selector.

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