Irish Gaeilge

BCP 47 language tag: ga

Lokalized supports cardinality, cardinality range, and ordinality rules for Irish.

Irish is most often spoken in Ireland and the United Kingdom.

Cardinalities

  • CARDINALITY_ONE

    Matches n = 1

    Example Integers: 1

    Example Decimals: 1.0, 1.00, 1.000, 1.0000

  • CARDINALITY_TWO

    Matches n = 2

    Example Integers: 2

    Example Decimals: 2.0, 2.00, 2.000, 2.0000

  • CARDINALITY_FEW

    Matches n = 3..6

    Example Integers: 3, 6

    Example Decimals: 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000

  • CARDINALITY_MANY

    Matches n = 7..10

    Example Integers: 7, 10

    Example Decimals: 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000

  • CARDINALITY_OTHER

    Matches all other values

    Example Integers: 0, 11, 25, 100, 1000, 10000, 100000, 1000000, …

    Example Decimals: 0.0, 0.9, 1.1, 1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …

Cardinality example

This localized strings example uses complete, page-local CLDR minimal-pair patterns to demonstrate every Cardinality category defined for the locale. Minimal-pair text contrasts grammatical forms; it is language-reference data, not reusable application copy.

Source: Unicode CLDR 48.2 ga locale data.

Sample localized strings file
ga.json Localized Strings File (Irish)
{
  "Cardinality.MinimalPair": {
    "commentary": "Demonstrates every CLDR cardinal category defined for this locale.",
    "translation": "{{cardinalityExample}}",
    "placeholders": {
      "cardinalityExample": {
        "value": "cardinalityValue",
        "translations": {
          "CARDINALITY_ONE": "{{formattedCardinalityValue}} cheann, {{formattedCardinalityValue}} uair, {{formattedCardinalityValue}} chat, {{formattedCardinalityValue}} éan, {{formattedCardinalityValue}} bhróg",
          "CARDINALITY_TWO": "{{formattedCardinalityValue}} cheann, {{formattedCardinalityValue}} uair, {{formattedCardinalityValue}} chat, {{formattedCardinalityValue}} éan, {{formattedCardinalityValue}} bhróig",
          "CARDINALITY_FEW": "{{formattedCardinalityValue}} cinn, {{formattedCardinalityValue}} huaire, {{formattedCardinalityValue}} chat, {{formattedCardinalityValue}} éan, {{formattedCardinalityValue}} bhróg",
          "CARDINALITY_MANY": "{{formattedCardinalityValue}} gcinn, {{formattedCardinalityValue}} n-uaire, {{formattedCardinalityValue}} gcat, {{formattedCardinalityValue}} n-éan, {{formattedCardinalityValue}} mbróg",
          "CARDINALITY_OTHER": "{{formattedCardinalityValue}} ceann, {{formattedCardinalityValue}} uair, {{formattedCardinalityValue}} cat, {{formattedCardinalityValue}} éan, {{formattedCardinalityValue}} bróg"
        }
      }
    }
  }
}
Usage and expected results

The Java code passes each raw number for cardinality selection and formats its display value separately with NumberFormat.

Locale locale = Locale.forLanguageTag("ga");

Strings strings = Strings.withFallbackLocale(locale)
  .localizedStringSupplier(() -> LocalizedStringLoader.loadFromFilesystem(Paths.get("strings")))
  .localeSupplier((matcher) -> matcher.bestMatchFor(locale))
  .build();

NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);

// Raw numbers select language forms; NumberFormat produces the display values

// CARDINALITY_ONE
Number oneCardinalityValue = 1;
String oneFormattedCardinalityValue = numberFormat.format(oneCardinalityValue);

assertEquals(Cardinality.ONE, Cardinality.forNumber(oneCardinalityValue, locale));

// Expected: 1 cheann, 1 uair, 1 chat, 1 éan, 1 bhróg
assertEquals(
  oneFormattedCardinalityValue + " cheann, " + oneFormattedCardinalityValue + " uair, " + oneFormattedCardinalityValue + " chat, " + oneFormattedCardinalityValue + " éan, " + oneFormattedCardinalityValue + " bhróg",
  strings.get(
    "Cardinality.MinimalPair",
    Map.of(
      "cardinalityValue", oneCardinalityValue,
      "formattedCardinalityValue", oneFormattedCardinalityValue
    )
  )
);

// CARDINALITY_TWO
Number twoCardinalityValue = 2;
String twoFormattedCardinalityValue = numberFormat.format(twoCardinalityValue);

assertEquals(Cardinality.TWO, Cardinality.forNumber(twoCardinalityValue, locale));

// Expected: 2 cheann, 2 uair, 2 chat, 2 éan, 2 bhróig
assertEquals(
  twoFormattedCardinalityValue + " cheann, " + twoFormattedCardinalityValue + " uair, " + twoFormattedCardinalityValue + " chat, " + twoFormattedCardinalityValue + " éan, " + twoFormattedCardinalityValue + " bhróig",
  strings.get(
    "Cardinality.MinimalPair",
    Map.of(
      "cardinalityValue", twoCardinalityValue,
      "formattedCardinalityValue", twoFormattedCardinalityValue
    )
  )
);

// CARDINALITY_FEW
Number fewCardinalityValue = 3;
String fewFormattedCardinalityValue = numberFormat.format(fewCardinalityValue);

assertEquals(Cardinality.FEW, Cardinality.forNumber(fewCardinalityValue, locale));

// Expected: 3 cinn, 3 huaire, 3 chat, 3 éan, 3 bhróg
assertEquals(
  fewFormattedCardinalityValue + " cinn, " + fewFormattedCardinalityValue + " huaire, " + fewFormattedCardinalityValue + " chat, " + fewFormattedCardinalityValue + " éan, " + fewFormattedCardinalityValue + " bhróg",
  strings.get(
    "Cardinality.MinimalPair",
    Map.of(
      "cardinalityValue", fewCardinalityValue,
      "formattedCardinalityValue", fewFormattedCardinalityValue
    )
  )
);

// CARDINALITY_MANY
Number manyCardinalityValue = 7;
String manyFormattedCardinalityValue = numberFormat.format(manyCardinalityValue);

assertEquals(Cardinality.MANY, Cardinality.forNumber(manyCardinalityValue, locale));

// Expected: 7 gcinn, 7 n-uaire, 7 gcat, 7 n-éan, 7 mbróg
assertEquals(
  manyFormattedCardinalityValue + " gcinn, " + manyFormattedCardinalityValue + " n-uaire, " + manyFormattedCardinalityValue + " gcat, " + manyFormattedCardinalityValue + " n-éan, " + manyFormattedCardinalityValue + " mbróg",
  strings.get(
    "Cardinality.MinimalPair",
    Map.of(
      "cardinalityValue", manyCardinalityValue,
      "formattedCardinalityValue", manyFormattedCardinalityValue
    )
  )
);

// CARDINALITY_OTHER
Number otherCardinalityValue = 0;
String otherFormattedCardinalityValue = numberFormat.format(otherCardinalityValue);

assertEquals(Cardinality.OTHER, Cardinality.forNumber(otherCardinalityValue, locale));

// Expected: 0 ceann, 0 uair, 0 cat, 0 éan, 0 bróg
assertEquals(
  otherFormattedCardinalityValue + " ceann, " + otherFormattedCardinalityValue + " uair, " + otherFormattedCardinalityValue + " cat, " + otherFormattedCardinalityValue + " éan, " + otherFormattedCardinalityValue + " bróg",
  strings.get(
    "Cardinality.MinimalPair",
    Map.of(
      "cardinalityValue", otherCardinalityValue,
      "formattedCardinalityValue", otherFormattedCardinalityValue
    )
  )
);

Cardinality Ranges

These are CLDR's explicit range mappings. For any start/end pair not listed, Cardinality.forRange(...) falls back to the ending cardinality.

  • CARDINALITY_ONE - CARDINALITY_TWO

    Matches CARDINALITY_TWO

  • CARDINALITY_ONE - CARDINALITY_FEW

    Matches CARDINALITY_FEW

  • CARDINALITY_ONE - CARDINALITY_MANY

    Matches CARDINALITY_MANY

  • CARDINALITY_ONE - CARDINALITY_OTHER

    Matches CARDINALITY_OTHER

  • CARDINALITY_TWO - CARDINALITY_FEW

    Matches CARDINALITY_FEW

  • CARDINALITY_TWO - CARDINALITY_MANY

    Matches CARDINALITY_MANY

  • CARDINALITY_TWO - CARDINALITY_OTHER

    Matches CARDINALITY_OTHER

  • CARDINALITY_FEW - CARDINALITY_FEW

    Matches CARDINALITY_FEW

  • CARDINALITY_FEW - CARDINALITY_MANY

    Matches CARDINALITY_MANY

  • CARDINALITY_FEW - CARDINALITY_OTHER

    Matches CARDINALITY_OTHER

  • CARDINALITY_MANY - CARDINALITY_MANY

    Matches CARDINALITY_MANY

  • CARDINALITY_MANY - CARDINALITY_OTHER

    Matches CARDINALITY_OTHER

  • CARDINALITY_OTHER - CARDINALITY_ONE

    Matches CARDINALITY_ONE

  • CARDINALITY_OTHER - CARDINALITY_TWO

    Matches CARDINALITY_TWO

  • CARDINALITY_OTHER - CARDINALITY_FEW

    Matches CARDINALITY_FEW

  • CARDINALITY_OTHER - CARDINALITY_MANY

    Matches CARDINALITY_MANY

  • CARDINALITY_OTHER - CARDINALITY_OTHER

    Matches CARDINALITY_OTHER

Ordinalities

  • ORDINALITY_ONE

    Matches n = 1

    Example Integers: 1

  • ORDINALITY_OTHER

    Matches all other values

    Example Integers: 0, 2, 16, 100, 1000, 10000, 100000, 1000000, …

Ordinality example

This localized strings example uses complete CLDR minimal-pair patterns to demonstrate every Ordinality category defined for the locale.

Source: Unicode CLDR 48.2 ga locale data.

Sample localized strings file
ga.json Localized Strings File (Irish)
{
  "Ordinal.MinimalPair": {
    "commentary": "Demonstrates every CLDR ordinal category defined for this locale.",
    "translation": "{{ordinalExample}}",
    "placeholders": {
      "ordinalExample": {
        "value": "ordinalValue",
        "translations": {
          "ORDINALITY_ONE": "Glac an {{formattedOrdinalValue}}ú chasadh ar dheis.",
          "ORDINALITY_OTHER": "Glac an {{formattedOrdinalValue}}ú casadh ar dheis."
        }
      }
    }
  }
}
Usage and expected results

The Java code passes each raw number to Ordinality.forNumber(...) and formats its display value separately with NumberFormat.

Locale locale = Locale.forLanguageTag("ga");

Strings strings = Strings.withFallbackLocale(locale)
  .localizedStringSupplier(() -> LocalizedStringLoader.loadFromFilesystem(Paths.get("strings")))
  .localeSupplier((matcher) -> matcher.bestMatchFor(locale))
  .build();

NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);

// Raw numbers select language forms; NumberFormat produces the display values

// ORDINALITY_ONE
Number oneOrdinalValue = 1;
String oneFormattedOrdinalValue = numberFormat.format(oneOrdinalValue);

assertEquals(Ordinality.ONE, Ordinality.forNumber(oneOrdinalValue, locale));

// Expected: Glac an 1ú chasadh ar dheis.
assertEquals("Glac an " + oneFormattedOrdinalValue + "ú chasadh ar dheis.", strings.get(
  "Ordinal.MinimalPair",
  Map.of("ordinalValue", oneOrdinalValue, "formattedOrdinalValue", oneFormattedOrdinalValue)
));

// ORDINALITY_OTHER
Number otherOrdinalValue = 2;
String otherFormattedOrdinalValue = numberFormat.format(otherOrdinalValue);

assertEquals(Ordinality.OTHER, Ordinality.forNumber(otherOrdinalValue, locale));

// Expected: Glac an 2ú casadh ar dheis.
assertEquals("Glac an " + otherFormattedOrdinalValue + "ú casadh ar dheis.", strings.get(
  "Ordinal.MinimalPair",
  Map.of("ordinalValue", otherOrdinalValue, "formattedOrdinalValue", otherFormattedOrdinalValue)
));

Addendum: Language Form Rules

The language form expressions above are specified by Unicode Technical Standard #35 and use the following notation:

  • n absolute value of the source number (integer and decimals)
  • i integer digits of n
  • v number of visible fraction digits in n, with trailing zeros
  • w number of visible fraction digits in n, without trailing zeros
  • f visible fractional digits in n, with trailing zeros
  • t visible fractional digits in n, without trailing zeros
  • c/e compact decimal exponent operands used by some CLDR compact-number rules