Skip to content
Novus Examples
json2.6 KB

ICU MessageFormat — Nested select/plural (English)

English 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.

Preview — first 50 linesjson
{
  "locale": "en",
  "format": "icu-messageformat",
  "note": "In ICU MessageFormat, '#' inside a plural branch binds to the NEAREST enclosing plural argument, not the outermost one. Where an outer count must appear inside an inner plural, these messages use the explicit {name} form instead of '#'.",
  "messages": {
    "shared": "{count, plural, =0 {No one has shared this} one {{sharerGender, select, female {She} male {He} other {They}} has shared this} other {# people have shared this}}",
    "reminders": "{audience, select, self {You have {count, plural, one {# reminder} other {# reminders}}} team {Your team has {count, plural, one {# reminder} other {# reminders}}} other {There {count, plural, one {is # reminder} other {are # reminders}}}}",
    "digest": "{period, select, day {Today} week {This week} other {In this period}}: {count, plural, =0 {no messages} other {{count} messages, {unread, plural, =0 {all read} other {# unread}}}}"
  },
  "cases": [
    {
      "message": "shared",
      "args": {
        "count": 0,
        "sharerGender": "other"
      },
      "expected": "No one has shared this"
    },
    {
      "message": "shared",
      "args": {
        "count": 1,
        "sharerGender": "female"
      },
      "expected": "She has shared this"
    },
    {
      "message": "shared",
      "args": {
        "count": 1,
        "sharerGender": "male"
      },
      "expected": "He has shared this"
    },
    {
      "message": "shared",
      "args": {
        "count": 4,
        "sharerGender": "female"
      },
      "expected": "4 people have shared this"
    },
    {
      "message": "reminders",
      "args": {
        "audience": "self",
        "count": 1
      },
      "expected": "You have 1 reminder"
    },
97 lines total — download for the full file.

Specifications

Format
ICU MessageFormat
Locale
en
Messages
3
Cases
10
Nesting
select inside plural and plural inside select
Max Depth
3
Seed
20260807
Wave
p7
Line Endings
LF

Testing contract

Expected to pass
Scenario
Feed each `cases` entry's arguments to an ICU MessageFormat implementation and format the named message.
Expected result
Every case produces its recorded string or plural category; a formatter that binds '#' to the outermost plural argument fails the `digest` message.

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

“ICU MessageFormat — Nested select/plural (English)” 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 · 3 messages · 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("messages-en.json") as f:
    data = json.load(f)
print(type(data), len(data))

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