plural - ActiveState ActiveGo 1.8

Package plural

import ""

Overview ▾

Package plural provides utilities for handling linguistic plurals in text.

The definitions in this package are based on the plural rule handling defined in CLDR. See for details.


CLDRVersion is the CLDR version from which the tables in this package are derived.

const CLDRVersion = "30"

type Form

Form defines a plural form.

Not all languages support all forms. Also, the meaning of each form varies per language. It is important to note that the name of a form does not necessarily correspond one-to-one with the set of numbers. For instance, for Croation, One matches not only 1, but also 11, 21, etc.

Each language must at least support the form "other".

type Form byte
const (
    Other Form = iota

type Rules

Rules defines the plural rules for all languages for a certain plural type.

This package is UNDER CONSTRUCTION and its API may change.

type Rules struct {
    // contains filtered or unexported fields
var (
    // Cardinal defines the plural rules for numbers indicating quantities.
    Cardinal *Rules = cardinal

    // Ordinal defines the plural rules for numbers indicating position
    // (first, second, etc.).
    Ordinal *Rules = ordinal

func (*Rules) MatchDigits

func (p *Rules) MatchDigits(t language.Tag, digits []byte, exp, scale int) Form

MatchDigits computes the plural form for the given language and the given decimal floating point digits. The digits are stored in big-endian order and are of value byte(0) - byte(9). The floating point position is indicated by exp and the number of visible decimals is scale. All leading and trailing zeros may be omitted from digits.

The following table contains examples of possible arguments to represent the given numbers.

decimal    digits              exp    scale
123        []byte{1, 2, 3}     3      0
123.4      []byte{1, 2, 3, 4}  3      1
123.40     []byte{1, 2, 3, 4}  3      2
100000     []byte{1}           6......0
100000.00  []byte{1}           6......3