PluralRules
open class PluralRules : Serializable
kotlin.Any | |
↳ | android.icu.text.PluralRules |
Defines rules for mapping non-negative numeric values onto a small set of keywords.
Rules are constructed from a text description, consisting of a series of keywords and conditions. The #select method examines each condition in order and returns the keyword for the first condition that matches the number. If none match, KEYWORD_OTHER
is returned.
A PluralRules object is immutable. It contains caches for sample values, but those are synchronized.
PluralRules is Serializable so that it can be used in formatters, which are serializable.
For more information, details, and tips for writing rules, see the LDML spec, Part 3.5 Language Plural Rules
Examples:
"one: n is 1; few: n in 2..4"
This defines two rules, for 'one' and 'few'. The condition for 'one' is "n is 1" which means that the number must be equal to 1 for this condition to pass. The condition for 'few' is "n in 2..4" which means that the number must be between 2 and 4 inclusive - and be an integer - for this condition to pass. All other numbers are assigned the keyword "other" by the default rule.
"zero: n is 0; one: n is 1; zero: n mod 100 in 1..19"
This illustrates that the same keyword can be defined multiple times. Each rule is examined in order, and the first keyword whose condition passes is the one returned. Also notes that a modulus is applied to n in the last rule. Thus its condition holds for 119, 219, 319...
"one: n is 1; few: n mod 10 in 2..4 and n mod 100 not in 12..14"
This illustrates conjunction and negation. The condition for 'few' has two parts, both of which must be met: "n mod 10 in 2..4" and "n mod 100 not in 12..14". The first part applies a modulus to n before the test as in the previous example. The second part applies a different modulus and also uses negation, thus it matches all numbers not in 12, 13, 14, 112, 113, 114, 212, 213, 214...
Syntax:
rules = rule (';' rule)* rule = keyword ':' condition keyword = <identifier> condition = and_condition ('or' and_condition)* and_condition = relation ('and' relation)* relation = not? expr not? rel not? range_list expr = ('n' | 'i' | 'f' | 'v' | 't') (mod value)? not = 'not' | '!' rel = 'in' | 'is' | '=' | '≠' | 'within' mod = 'mod' | '%' range_list = (range | value) (',' range_list)* value = digit+ digit = 0|1|2|3|4|5|6|7|8|9 range = value'..'value
Each not term inverts the meaning; however, there should not be more than one of them.
The i, f, t, and v values are defined as follows:
- i to be the integer digits.
- f to be the visible decimal digits, as an integer.
- t to be the visible decimal digits—without trailing zeros—as an integer.
- v to be the number of visible fraction digits.
- j is defined to only match integers. That is j is 3 fails if v != 0 (eg for 3.1 or 3.0).
Examples are in the following table:
n | i | f | v |
---|---|---|---|
1.0 | 1 | 0 | 1 |
1.00 | 1 | 0 | 2 |
1.3 | 1 | 3 | 1 |
1.03 | 1 | 3 | 2 |
1.23 | 1 | 23 | 2 |
An "identifier" is a sequence of characters that do not have the Unicode Pattern_Syntax or Pattern_White_Space properties.
The difference between 'in' and 'within' is that 'in' only includes integers in the specified range, while 'within' includes all values. Using 'within' with a range_list consisting entirely of values is the same as using 'in' (it's not an error).
Summary
Nested classes | |
---|---|
Type of plurals and PluralRules. |
Constants | |
---|---|
static String |
Common name for the 'paucal' or other special plural form. |
static String |
Common name for the arabic (11 to 99) plural form. |
static String |
Common name for the 'singular' plural form. |
static String |
Common name for the default plural form. |
static String |
Common name for the 'dual' plural form. |
static String |
Common name for the 'zero' plural form. |
static Double |
Value returned by |
Public methods | |
---|---|
open static PluralRules! |
createRules(description: String!) Creates a PluralRules from a description if it is parsable, otherwise returns null. |
open Boolean |
equals(rhs: PluralRules!) Returns true if rhs is equal to this. |
open Boolean |
Indicates whether some other object is "equal to" this one. |
open static PluralRules! |
Provides access to the predefined cardinal-number |
open static PluralRules! |
forLocale(locale: ULocale!, type: PluralRules.PluralType!) Provides access to the predefined |
open static PluralRules! |
Provides access to the predefined cardinal-number |
open static PluralRules! |
forLocale(locale: Locale!, type: PluralRules.PluralType!) Provides access to the predefined |
open MutableCollection<Double!>! |
getAllKeywordValues(keyword: String!) Returns all the values that trigger this keyword, or null if the number of such values is unlimited. |
open MutableSet<String!>! |
Returns a set of all rule keywords used in this |
open MutableCollection<Double!>! |
getSamples(keyword: String!) Returns a list of integer values for which select() would return that keyword, or null if the keyword is not defined. |
open Double |
getUniqueKeywordValue(keyword: String!) Returns the unique value that this keyword matches, or |
open static PluralRules! |
parseDescription(description: String!) Parses a plural rules description and returns a PluralRules. |
open String! |
select(number: FormattedNumber!) Given a formatted number, returns the keyword of the first rule that applies to the number. |
open String! |
select(range: FormattedNumberRange!) Given a formatted number range, returns the overall plural form of the range. |
open String! |
Given a floating-point number, returns the keyword of the first rule that applies to the number. |
open String |
toString() Returns a string representation of the object. |
Properties | |
---|---|
static PluralRules! |
The default rules that accept any number and return |
Constants
KEYWORD_FEW
static val KEYWORD_FEW: String
Common name for the 'paucal' or other special plural form.
Value: "few"
KEYWORD_MANY
static val KEYWORD_MANY: String
Common name for the arabic (11 to 99) plural form.
Value: "many"
KEYWORD_ONE
static val KEYWORD_ONE: String
Common name for the 'singular' plural form.
Value: "one"
KEYWORD_OTHER
static val KEYWORD_OTHER: String
Common name for the default plural form. This name is returned for values to which no other form in the rule applies. It can additionally be assigned rules of its own.
Value: "other"
KEYWORD_TWO
static val KEYWORD_TWO: String
Common name for the 'dual' plural form.
Value: "two"
KEYWORD_ZERO
static val KEYWORD_ZERO: String
Common name for the 'zero' plural form.
Value: "zero"
NO_UNIQUE_VALUE
static val NO_UNIQUE_VALUE: Double
Value returned by getUniqueKeywordValue
when there is no unique value to return.
Value: -0.00123456777
Public methods
createRules
open static fun createRules(description: String!): PluralRules!
Creates a PluralRules from a description if it is parsable, otherwise returns null.
Parameters | |
---|---|
description |
String!: the rule description. |
Return | |
---|---|
PluralRules! |
the PluralRules |
equals
open fun equals(rhs: PluralRules!): Boolean
Returns true if rhs is equal to this.
Parameters | |
---|---|
rhs |
PluralRules!: the PluralRules to compare to. |
Return | |
---|---|
Boolean |
true if this and rhs are equal. |
equals
open fun equals(other: Any?): Boolean
Indicates whether some other object is "equal to" this one.
The equals
method implements an equivalence relation on non-null object references:
- It is reflexive: for any non-null reference value
x
,x.equals(x)
should returntrue
. - It is symmetric: for any non-null reference values
x
andy
,x.equals(y)
should returntrue
if and only ify.equals(x)
returnstrue
. - It is transitive: for any non-null reference values
x
,y
, andz
, ifx.equals(y)
returnstrue
andy.equals(z)
returnstrue
, thenx.equals(z)
should returntrue
. - It is consistent: for any non-null reference values
x
andy
, multiple invocations ofx.equals(y)
consistently returntrue
or consistently returnfalse
, provided no information used inequals
comparisons on the objects is modified. - For any non-null reference value
x
,x.equals(null)
should returnfalse
.
An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.
Parameters | |
---|---|
obj |
the reference object with which to compare. |
Return | |
---|---|
Boolean |
true if this object is the same as the obj argument; false otherwise. |
forLocale
open static fun forLocale(locale: ULocale!): PluralRules!
Provides access to the predefined cardinal-number PluralRules
for a given locale. Same as forLocale(locale, PluralType.CARDINAL).
ICU defines plural rules for many locales based on CLDR Language Plural Rules. For these predefined rules, see CLDR page at https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html
Parameters | |
---|---|
locale |
ULocale!: The locale for which a PluralRules object is returned. |
Return | |
---|---|
PluralRules! |
The predefined PluralRules object for this locale. If there's no predefined rules for this locale, the rules for the closest parent in the locale hierarchy that has one will be returned. The final fallback always returns the default rules. |
forLocale
open static fun forLocale(
locale: ULocale!,
type: PluralRules.PluralType!
): PluralRules!
Provides access to the predefined PluralRules
for a given locale and the plural type.
ICU defines plural rules for many locales based on CLDR Language Plural Rules. For these predefined rules, see CLDR page at https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html
Parameters | |
---|---|
locale |
ULocale!: The locale for which a PluralRules object is returned. |
type |
PluralRules.PluralType!: The plural type (e.g., cardinal or ordinal). |
Return | |
---|---|
PluralRules! |
The predefined PluralRules object for this locale. If there's no predefined rules for this locale, the rules for the closest parent in the locale hierarchy that has one will be returned. The final fallback always returns the default rules. |
forLocale
open static fun forLocale(locale: Locale!): PluralRules!
Provides access to the predefined cardinal-number PluralRules
for a given java.util.Locale
. Same as forLocale(locale, PluralType.CARDINAL).
ICU defines plural rules for many locales based on CLDR Language Plural Rules. For these predefined rules, see CLDR page at https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html
Parameters | |
---|---|
locale |
Locale!: The locale for which a PluralRules object is returned. |
Return | |
---|---|
PluralRules! |
The predefined PluralRules object for this locale. If there's no predefined rules for this locale, the rules for the closest parent in the locale hierarchy that has one will be returned. The final fallback always returns the default rules. |
forLocale
open static fun forLocale(
locale: Locale!,
type: PluralRules.PluralType!
): PluralRules!
Provides access to the predefined PluralRules
for a given java.util.Locale
and the plural type.
ICU defines plural rules for many locales based on CLDR Language Plural Rules. For these predefined rules, see CLDR page at https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html
Parameters | |
---|---|
locale |
Locale!: The locale for which a PluralRules object is returned. |
type |
PluralRules.PluralType!: The plural type (e.g., cardinal or ordinal). |
Return | |
---|---|
PluralRules! |
The predefined PluralRules object for this locale. If there's no predefined rules for this locale, the rules for the closest parent in the locale hierarchy that has one will be returned. The final fallback always returns the default rules. |
getAllKeywordValues
open fun getAllKeywordValues(keyword: String!): MutableCollection<Double!>!
Returns all the values that trigger this keyword, or null if the number of such values is unlimited.
Parameters | |
---|---|
keyword |
String!: the keyword |
Return | |
---|---|
MutableCollection<Double!>! |
the values that trigger this keyword, or null. The returned collection is immutable. It will be empty if the keyword is not defined. |
getKeywords
open fun getKeywords(): MutableSet<String!>!
Returns a set of all rule keywords used in this PluralRules
object. The rule "other" is always present by default.
Return | |
---|---|
MutableSet<String!>! |
The set of keywords. |
getSamples
open fun getSamples(keyword: String!): MutableCollection<Double!>!
Returns a list of integer values for which select() would return that keyword, or null if the keyword is not defined. The returned collection is unmodifiable. The returned list is not complete, and there might be additional values that would return the keyword.
Parameters | |
---|---|
keyword |
String!: the keyword to test |
Return | |
---|---|
MutableCollection<Double!>! |
a list of values matching the keyword. |
getUniqueKeywordValue
open fun getUniqueKeywordValue(keyword: String!): Double
Returns the unique value that this keyword matches, or NO_UNIQUE_VALUE
if the keyword matches multiple values or is not defined for this PluralRules.
Parameters | |
---|---|
keyword |
String!: the keyword to check for a unique value |
Return | |
---|---|
Double |
The unique value for the keyword, or NO_UNIQUE_VALUE. |
parseDescription
open static fun parseDescription(description: String!): PluralRules!
Parses a plural rules description and returns a PluralRules.
Parameters | |
---|---|
description |
String!: the rule description. |
Exceptions | |
---|---|
java.text.ParseException |
if the description cannot be parsed. The exception index is typically not set, it will be -1. |
select
open fun select(number: FormattedNumber!): String!
Given a formatted number, returns the keyword of the first rule that applies to the number. A FormattedNumber allows you to specify an exponent or trailing zeros, which can affect the plural category. To get a FormattedNumber, see NumberFormatter
.
Parameters | |
---|---|
number |
FormattedNumber!: The number for which the rule has to be determined. |
Return | |
---|---|
String! |
The keyword of the selected rule. |
select
open fun select(range: FormattedNumberRange!): String!
Given a formatted number range, returns the overall plural form of the range. For example, "3-5" returns "other" in English. To get a FormattedNumberRange, see android.icu.number.NumberRangeFormatter
. This method only works if PluralRules was created with a locale. If it was created from PluralRules.createRules(), or if it was deserialized, this method throws UnsupportedOperationException.
Parameters | |
---|---|
range |
FormattedNumberRange!: The number range onto which the rules will be applied. |
Return | |
---|---|
String! |
The keyword of the selected rule. |
Exceptions | |
---|---|
java.lang.UnsupportedOperationException |
If called on an instance without plural ranges data. |
select
open fun select(number: Double): String!
Given a floating-point number, returns the keyword of the first rule that applies to the number.
Parameters | |
---|---|
number |
Double: The number for which the rule has to be determined. |
Return | |
---|---|
String! |
The keyword of the selected rule. |
toString
open fun toString(): String
Returns a string representation of the object.
Return | |
---|---|
String |
a string representation of the object. |
Properties
DEFAULT
static val DEFAULT: PluralRules!
The default rules that accept any number and return KEYWORD_OTHER
.