|
| MessageFormat (const UnicodeString &pattern, UErrorCode &status) |
| Constructs a new MessageFormat using the given pattern and the default locale. More...
|
|
| MessageFormat (const UnicodeString &pattern, const Locale &newLocale, UErrorCode &status) |
| Constructs a new MessageFormat using the given pattern and locale. More...
|
|
| MessageFormat (const UnicodeString &pattern, const Locale &newLocale, UParseError &parseError, UErrorCode &status) |
| Constructs a new MessageFormat using the given pattern and locale. More...
|
|
| MessageFormat (const MessageFormat &) |
| Constructs a new MessageFormat from an existing one. More...
|
|
const MessageFormat & | operator= (const MessageFormat &) |
| Assignment operator. More...
|
|
virtual | ~MessageFormat () |
| Destructor. More...
|
|
virtual Format * | clone (void) const |
| Clones this Format object polymorphically. More...
|
|
virtual UBool | operator== (const Format &other) const |
| Returns true if the given Format objects are semantically equal. More...
|
|
virtual void | setLocale (const Locale &theLocale) |
| Sets the locale to be used for creating argument Format objects. More...
|
|
virtual const Locale & | getLocale (void) const |
| Gets the locale used for creating argument Format objects. More...
|
|
virtual void | applyPattern (const UnicodeString &pattern, UErrorCode &status) |
| Applies the given pattern string to this message format. More...
|
|
virtual void | applyPattern (const UnicodeString &pattern, UParseError &parseError, UErrorCode &status) |
| Applies the given pattern string to this message format. More...
|
|
virtual void | applyPattern (const UnicodeString &pattern, UMessagePatternApostropheMode aposMode, UParseError *parseError, UErrorCode &status) |
| Sets the UMessagePatternApostropheMode and the pattern used by this message format. More...
|
|
UMessagePatternApostropheMode | getApostropheMode () const |
|
virtual UnicodeString & | toPattern (UnicodeString &appendTo) const |
| Returns a pattern that can be used to recreate this object. More...
|
|
virtual void | adoptFormats (Format **formatsToAdopt, int32_t count) |
| Sets subformats. More...
|
|
virtual void | setFormats (const Format **newFormats, int32_t cnt) |
| Sets subformats. More...
|
|
virtual void | adoptFormat (int32_t formatNumber, Format *formatToAdopt) |
| Sets one subformat. More...
|
|
virtual void | setFormat (int32_t formatNumber, const Format &format) |
| Sets one subformat. More...
|
|
virtual StringEnumeration * | getFormatNames (UErrorCode &status) |
| Gets format names. More...
|
|
virtual Format * | getFormat (const UnicodeString &formatName, UErrorCode &status) |
| Gets subformat pointer for given format name. More...
|
|
virtual void | setFormat (const UnicodeString &formatName, const Format &format, UErrorCode &status) |
| Sets one subformat for given format name. More...
|
|
virtual void | adoptFormat (const UnicodeString &formatName, Format *formatToAdopt, UErrorCode &status) |
| Sets one subformat for given format name. More...
|
|
virtual const Format ** | getFormats (int32_t &count) const |
| Gets an array of subformats of this object. More...
|
|
UnicodeString & | format (const Formattable *source, int32_t count, UnicodeString &appendTo, FieldPosition &ignore, UErrorCode &status) const |
| Formats the given array of arguments into a user-readable string. More...
|
|
virtual UnicodeString & | format (const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const |
| Formats the given array of arguments into a user-readable string. More...
|
|
UnicodeString & | format (const UnicodeString *argumentNames, const Formattable *arguments, int32_t count, UnicodeString &appendTo, UErrorCode &status) const |
| Formats the given array of arguments into a user-defined argument name array. More...
|
|
virtual Formattable * | parse (const UnicodeString &source, ParsePosition &pos, int32_t &count) const |
| Parses the given string into an array of output arguments. More...
|
|
virtual Formattable * | parse (const UnicodeString &source, int32_t &count, UErrorCode &status) const |
| Parses the given string into an array of output arguments. More...
|
|
virtual void | parseObject (const UnicodeString &source, Formattable &result, ParsePosition &pos) const |
| Parses the given string into an array of output arguments stored within a single Formattable of type kArray. More...
|
|
UBool | usesNamedArguments () const |
| Returns true if this MessageFormat uses named arguments, and false otherwise. More...
|
|
int32_t | getArgTypeCount () const |
| This API is for ICU internal use only. More...
|
|
virtual UClassID | getDynamicClassID (void) const |
| Returns a unique class ID POLYMORPHICALLY. More...
|
|
virtual | ~Format () |
| Destructor. More...
|
|
UBool | operator!= (const Format &other) const |
| Return true if the given Format objects are not semantically equal. More...
|
|
UnicodeString & | format (const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const |
| Formats an object to produce a string. More...
|
|
virtual UnicodeString & | format (const Formattable &obj, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const |
| Format an object to produce a string. More...
|
|
void | parseObject (const UnicodeString &source, Formattable &result, UErrorCode &status) const |
| Parses a string to produce an object. More...
|
|
Locale | getLocale (ULocDataLocaleType type, UErrorCode &status) const |
| Get the locale for this format object. More...
|
|
const char * | getLocaleID (ULocDataLocaleType type, UErrorCode &status) const |
| Get the locale for this format object. More...
|
|
virtual | ~UObject () |
| Destructor. More...
|
|
MessageFormat prepares strings for display to users, with optional arguments (variables/placeholders). The arguments can occur in any order, which is necessary for translation into languages with different grammars.
A MessageFormat is constructed from a pattern string with arguments in {curly braces} which will be replaced by formatted values.
MessageFormat
differs from the other Format
classes in that you create a MessageFormat
object with one of its constructors (not with a createInstance
style factory method). Factory methods aren't necessary because MessageFormat
itself doesn't implement locale-specific behavior. Any locale-specific behavior is defined by the pattern that you provide and the subformats used for inserted arguments.
Arguments can be named (using identifiers) or numbered (using small ASCII-digit integers). Some of the API methods work only with argument numbers and throw an exception if the pattern has named arguments (see usesNamedArguments()).
An argument might not specify any format type. In this case, a Number value is formatted with a default (for the locale) NumberFormat, a Date value is formatted with a default (for the locale) DateFormat, and for any other value its toString() value is used.
An argument might specify a "simple" type for which the specified Format object is created, cached and used.
An argument might have a "complex" type with nested MessageFormat sub-patterns. During formatting, one of these sub-messages is selected according to the argument value and recursively formatted.
After construction, a custom Format object can be set for a top-level argument, overriding the default formatting and parsing behavior for that argument. However, custom formatting can be achieved more simply by writing a typeless argument in the pattern string and supplying it with a preformatted string value.
When formatting, MessageFormat takes a collection of argument values and writes an output string. The argument values may be passed as an array (when the pattern contains only numbered arguments) or as an array of names and and an array of arguments (which works for both named and numbered arguments).
Each argument is matched with one of the input values by array index or argument name and formatted according to its pattern specification (or using a custom Format object if one was set). A numbered pattern argument is matched with an argument name that contains that number as an ASCII-decimal-digit string (without leading zero).
Patterns and Their Interpretation
MessageFormat
uses patterns of the following form:
message = messageText (argument messageText)*
argument = noneArg | simpleArg | complexArg
complexArg = choiceArg | pluralArg | selectArg | selectordinalArg
noneArg = '{' argNameOrNumber '}'
simpleArg = '{' argNameOrNumber ',' argType [',' argStyle] '}'
choiceArg = '{' argNameOrNumber ',' "choice" ',' choiceStyle '}'
pluralArg = '{' argNameOrNumber ',' "plural" ',' pluralStyle '}'
selectArg = '{' argNameOrNumber ',' "select" ',' selectStyle '}'
selectordinalArg = '{' argNameOrNumber ',' "selectordinal" ',' pluralStyle '}'
choiceStyle: see ChoiceFormat
pluralStyle: see PluralFormat
selectStyle: see SelectFormat
argNameOrNumber = argName | argNumber
argName = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
argNumber = '0' | ('1'..'9' ('0'..'9')*)
argType = "number" | "date" | "time" | "spellout" | "ordinal" | "duration"
argStyle = "short" | "medium" | "long" | "full" | "integer" | "currency" | "percent" | argStyleText | "::" argSkeletonText
-
messageText can contain quoted literal strings including syntax characters. A quoted literal string begins with an ASCII apostrophe and a syntax character (usually a {curly brace}) and continues until the next single apostrophe. A double ASCII apostrohpe inside or outside of a quoted string represents one literal apostrophe.
-
Quotable syntax characters are the {curly braces} in all messageText parts, plus the '#' sign in a messageText immediately inside a pluralStyle, and the '|' symbol in a messageText immediately inside a choiceStyle.
-
See also UMessagePatternApostropheMode
-
In argStyleText, every single ASCII apostrophe begins and ends quoted literal text, and unquoted {curly braces} must occur in matched pairs.
Recommendation: Use the real apostrophe (single quote) character ’ (U+2019) for human-readable text, and use the ASCII apostrophe ' (U+0027) only in program syntax, like quoting in MessageFormat. See the annotations for U+0027 Apostrophe in The Unicode Standard.
The choice
argument type is deprecated. Use plural
arguments for proper plural selection, and select
arguments for simple selection among a fixed set of choices.
The argType
and argStyle
values are used to create a Format
instance for the format element. The following table shows how the values map to Format instances. Combinations not shown in the table are illegal. Any argStyleText
must be a valid pattern string for the Format subclass used.
argType | argStyle | resulting Format object |
(none) | null |
number | (none) | NumberFormat.createInstance(getLocale(), status) |
integer | NumberFormat.createInstance(getLocale(), kNumberStyle, status) |
currency | NumberFormat.createCurrencyInstance(getLocale(), status) |
percent | NumberFormat.createPercentInstance(getLocale(), status) |
argStyleText | new DecimalFormat(argStyleText, new DecimalFormatSymbols(getLocale(), status), status) |
argSkeletonText | NumberFormatter::forSkeleton(argSkeletonText, status).locale(getLocale()).toFormat(status) |
date | (none) | DateFormat.createDateInstance(kDefault, getLocale(), status) |
short | DateFormat.createDateInstance(kShort, getLocale(), status) |
medium | DateFormat.createDateInstance(kDefault, getLocale(), status) |
long | DateFormat.createDateInstance(kLong, getLocale(), status) |
full | DateFormat.createDateInstance(kFull, getLocale(), status) |
argStyleText | new SimpleDateFormat(argStyleText, getLocale(), status) |
time | (none) | DateFormat.createTimeInstance(kDefault, getLocale(), status) |
short | DateFormat.createTimeInstance(kShort, getLocale(), status) |
medium | DateFormat.createTimeInstance(kDefault, getLocale(), status) |
long | DateFormat.createTimeInstance(kLong, getLocale(), status) |
full | DateFormat.createTimeInstance(kFull, getLocale(), status) |
argStyleText | new SimpleDateFormat(argStyleText, getLocale(), status) |
spellout | argStyleText (optional) | new RuleBasedNumberFormat(URBNF_SPELLOUT, getLocale(), status)
.setDefaultRuleset(argStyleText, status); |
ordinal | argStyleText (optional) | new RuleBasedNumberFormat(URBNF_ORDINAL, getLocale(), status)
.setDefaultRuleset(argStyleText, status); |
duration | argStyleText (optional) | new RuleBasedNumberFormat(URBNF_DURATION, getLocale(), status)
.setDefaultRuleset(argStyleText, status); |
Usage Information
Here are some examples of usage: Example 1:
GregorianCalendar cal(success);
Formattable arguments[] = {
7L,
Formattable( (Date) cal.getTime(success), Formattable::kIsDate),
"a disturbance in the Force"
};
UnicodeString result;
"At {1,time} on {1,date}, there was {2} on planet {0,number}.",
arguments, 3, result, success );
cout << "result: " << result << endl;
Typically, the message format will come from resources, and the arguments will be dynamically set at runtime.
Example 2:
Formattable testArgs[] = {3L, "MyDisk"};
"The disk \"{1}\" contains {0} file(s).", success );
UnicodeString string;
FieldPosition fpos = 0;
cout << "format: " << form.format(testArgs, 2, string, fpos, success ) << endl;
For messages that include plural forms, you can use a plural argument:
"{num_files, plural, "
"=0{There are no files on disk \"{disk_name}\".}"
"=1{There is one file on disk \"{disk_name}\".}"
"other{There are # files on disk \"{disk_name}\".}}",
Locale("en"),
success);
FieldPosition fpos = 0;
Formattable testArgs[] = {0L, "MyDisk"};
UnicodeString testArgsNames[] = {"num_files", "disk_name"};
UnicodeString result;
cout << msgFmt.format(testArgs, testArgsNames, 2, result, fpos, 0, success);
testArgs[0] = 3L;
cout << msgFmt.format(testArgs, testArgsNames, 2, result, fpos, 0, success);
output:
There are no files on disk "MyDisk".
There are 3 files on "MyDisk".
See PluralFormat and PluralRules for details.
Synchronization
MessageFormats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.
- Stable:
- ICU 2.0
Definition at line 328 of file msgfmt.h.