intl_message library
This provides classes to represent the internal structure of the
arguments to Intl.message. It is used when parsing sources to extract
messages or to generate code for message substitution. Normal programs
using Intl would not import this library.
While it's written in a somewhat abstract way, it has some assumptions about ICU-style message syntax for parameter substitutions, choices, selects, etc.
For example, if we have the message
plurals(num) => Intl.message("""${Intl.plural(num,
zero : 'Is zero plural?',
one : 'This is singular.',
other : 'This is plural ($num).')
}""",
name: "plurals", args: num, desc: "Basic plurals");
That is represented as a MainMessage which has only one message component, a
Plural, but also has a name, list of arguments, and a description.
The Plural has three different clauses. The zero clause is
a LiteralString containing 'Is zero plural?'. The other clause is a
CompositeMessage containing three pieces, a LiteralString for
'This is plural (', a VariableSubstitution for num. amd a LiteralString
for '.)'.
This representation isn't used at runtime. Rather, we read some format from a translation file, parse it into these objects, and they are then used to generate the code representation above.
Classes
- ComplexMessage
- Abstract class for messages with internal structure, representing the main Intl.message call, plurals, and genders.
- CompositeMessage
- This represents a message chunk that is a list of multiple sub-pieces, each of which is in turn a Message.
- Gender
-
Represents a message send of
Intl.genderinside a message that is to be internationalized. This corresponds to an ICU message syntax "select" with "male", "female", and "other" as the possible options. - LiteralString
- Represents a simple constant string with no dynamic elements.
- MainMessage
- Message
- An abstract superclass for Intl.message/plural/gender calls in the program's source text. We assemble these into objects that can be used to write out some translation format and can also print themselves into code.
- Plural
- Select
-
Represents a message send of
Intl.selectinside a message that is to be internationalized. This corresponds to an ICU message syntax "select" with arbitrary options. - SubMessage
- An abstract class to represent sub-sections of a message, primarily plurals and genders.
- VariableSubstitution
- Represents an interpolation of a variable value in a message. We expect this to be specified as an index into the list of variables, or else as the name of a variable that exists in arguments and we will compute the variable name or the index based on the value of the other.
Constants
- jsonEncoder → const JsonCodec
Exceptions / Errors
- IntlMessageExtractionException
- Exception thrown when we cannot process a message properly.