|
ICU 57.1 57.1
|
C API: MessageFormat. More...
#include "unicode/utypes.h"#include "unicode/localpointer.h"#include "unicode/uloc.h"#include "unicode/parseerr.h"#include <stdarg.h>Go to the source code of this file.
Typedefs | |
| typedef void * | UMessageFormat |
| The message format object. | |
C API: MessageFormat.
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.
The opaque UMessageFormat type is a thin C wrapper around a C++ MessageFormat. It is constructed from a pattern string with arguments in {curly braces} which will be replaced by formatted values.
Currently, the C API supports only numbered arguments.
For details about the pattern syntax and behavior, especially about the ASCII apostrophe vs. the real apostrophe (single quote) character ’ (U+2019), see the C++ MessageFormat class documentation.
Here are some examples of C API usage: Example 1:
UChar pattern[100];int32_t resultLengthOut, resultlength;u_uastrcpy(str, "disturbance in force");u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}");resultlength=0;resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, d1, str, 7);}//output>: "On March 18, 1999, there was a disturbance in force on planet 7"Smart pointer" base class; do not use directly: use LocalPointer etc.Definition localpointer.h:64UDate ucal_getMillis(const UCalendar *cal, UErrorCode *status)Get a UCalendar's current time in millis.@ UCAL_TRADITIONALDespite the name, UCAL_TRADITIONAL designates the locale's default calendar, which may be the Gregori...Definition ucal.h:164void ucal_setDateTime(UCalendar *cal, int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode *status)Set a UCalendar's current date.UCalendar * ucal_open(const UChar *zoneID, int32_t len, const char *locale, UCalendarType type, UErrorCode *status)Open a UCalendar.uint16_t UCharDefine UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...Definition umachine.h:312int32_t u_formatMessage(const char *locale, const UChar *pattern, int32_t patternLength, UChar *result, int32_t resultLength, UErrorCode *status,...)Format a message for a locale.UChar * u_uastrcpy(UChar *dst, const char *src)Copy a byte string encoded in the default codepage to a ustring.UErrorCodeError code to replace exception handling, so that the code is compatible with all C++ compilers,...Definition utypes.h:476
Typically, the message format will come from resources, and the arguments will be dynamically set at runtime.
Example 2:
UChar* str;UChar pattern[100];double testArgs= { 100.0, 1.0, 0.0};u_uastrcpy(str, "MyDisk");u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number,integer} files}");resultlength=0;resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str);u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, testArgs[i], str);}free(result);}// output, with different testArgs:// output: The disk "MyDisk" contains 100 files.// output: The disk "MyDisk" contains one file.// output: The disk "MyDisk" contains no files.
Example 3:
UChar* str;UChar pattern[100];int32_t resultlength,resultLengthOut;u_uastrcpy(str, "Kirti");log_verbose("Testing message format with Select test #1\n:");u_uastrcpy(pattern, "{0} est {1, select, female {all\\u00E9e} other {all\\u00E9}} \\u00E0 Paris.");resultlength=0;resultLengthOut=u_formatMessage( "fr", pattern, u_strlen(pattern), NULL, resultlength, &status, str , str1);{log_verbose("PASS: MessagFormat successful on Select test#1\n");else{}free(result);}int32_t u_strcmp(const UChar *s1, const UChar *s2)Compare two Unicode strings for bitwise equality (code unit order).
Definition in file umsg.h.
| int32_t u_formatMessage | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| UChar * | result, | ||
| int32_t | resultLength, | ||
| UErrorCode * | status, | ||
| ... | |||
| ) |
Format a message for a locale.
This function may perform re-ordering of the arguments depending on the locale. For all numeric arguments, double is assumed unless the type is explicitly integer. All choice format arguments must be of type double.
| locale | The locale for which the message will be formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| result | A pointer to a buffer to receive the formatted message. |
| resultLength | The maximum size of result. |
| status | A pointer to an UErrorCode to receive any errors |
| ... | A variable-length argument list containing the arguments specified in pattern. |
| int32_t u_formatMessageWithError | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| UChar * | result, | ||
| int32_t | resultLength, | ||
| UParseError * | parseError, | ||
| UErrorCode * | status, | ||
| ... | |||
| ) |
Format a message for a locale.
This function may perform re-ordering of the arguments depending on the locale. For all numeric arguments, double is assumed unless the type is explicitly integer. All choice format arguments must be of type double.
| locale | The locale for which the message will be formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| result | A pointer to a buffer to receive the formatted message. |
| resultLength | The maximum size of result. |
| status | A pointer to an UErrorCode to receive any errors |
| ... | A variable-length argument list containing the arguments specified in pattern. |
| parseError | A pointer to UParseError to receive information about errors occurred during parsing. |
| void u_parseMessage | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| const UChar * | source, | ||
| int32_t | sourceLength, | ||
| UErrorCode * | status, | ||
| ... | |||
| ) |
Parse a message.
For numeric arguments, this function will always use doubles. Integer types should not be passed. This function is not able to parse all output from u_formatMessage.
| locale | The locale for which the message is formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| source | The text to parse. |
| sourceLength | The length of source, or -1 if null-terminated. |
| status | A pointer to an UErrorCode to receive any errors |
| ... | A variable-length argument list containing the arguments specified in pattern. |
| void u_parseMessageWithError | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| const UChar * | source, | ||
| int32_t | sourceLength, | ||
| UParseError * | parseError, | ||
| UErrorCode * | status, | ||
| ... | |||
| ) |
Parse a message.
For numeric arguments, this function will always use doubles. Integer types should not be passed. This function is not able to parse all output from u_formatMessage.
| locale | The locale for which the message is formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| source | The text to parse. |
| sourceLength | The length of source, or -1 if null-terminated. |
| parseError | A pointer to UParseError to receive information about errors occurred during parsing. |
| status | A pointer to an UErrorCode to receive any errors |
| ... | A variable-length argument list containing the arguments specified in pattern. |
| int32_t u_vformatMessage | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| UChar * | result, | ||
| int32_t | resultLength, | ||
| va_list | ap, | ||
| UErrorCode * | status | ||
| ) |
Format a message for a locale.
This function may perform re-ordering of the arguments depending on the locale. For all numeric arguments, double is assumed unless the type is explicitly integer. All choice format arguments must be of type double.
| locale | The locale for which the message will be formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| result | A pointer to a buffer to receive the formatted message. |
| resultLength | The maximum size of result. |
| ap | A variable-length argument list containing the arguments specified |
| status | A pointer to an UErrorCode to receive any errors in pattern. |
| int32_t u_vformatMessageWithError | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| UChar * | result, | ||
| int32_t | resultLength, | ||
| UParseError * | parseError, | ||
| va_list | ap, | ||
| UErrorCode * | status | ||
| ) |
Format a message for a locale.
This function may perform re-ordering of the arguments depending on the locale. For all numeric arguments, double is assumed unless the type is explicitly integer. All choice format arguments must be of type double.
| locale | The locale for which the message will be formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| result | A pointer to a buffer to receive the formatted message. |
| resultLength | The maximum size of result. |
| parseError | A pointer to UParseError to receive information about errors occurred during parsing. |
| ap | A variable-length argument list containing the arguments specified |
| status | A pointer to an UErrorCode to receive any errors in pattern. |
| void u_vparseMessage | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| const UChar * | source, | ||
| int32_t | sourceLength, | ||
| va_list | ap, | ||
| UErrorCode * | status | ||
| ) |
Parse a message.
For numeric arguments, this function will always use doubles. Integer types should not be passed. This function is not able to parse all output from u_formatMessage.
| locale | The locale for which the message is formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| source | The text to parse. |
| sourceLength | The length of source, or -1 if null-terminated. |
| ap | A variable-length argument list containing the arguments |
| status | A pointer to an UErrorCode to receive any errors specified in pattern. |
| void u_vparseMessageWithError | ( | const char * | locale, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| const UChar * | source, | ||
| int32_t | sourceLength, | ||
| va_list | ap, | ||
| UParseError * | parseError, | ||
| UErrorCode * | status | ||
| ) |
Parse a message.
For numeric arguments, this function will always use doubles. Integer types should not be passed. This function is not able to parse all output from u_formatMessage.
| locale | The locale for which the message is formatted |
| pattern | The pattern specifying the message's format |
| patternLength | The length of pattern |
| source | The text to parse. |
| sourceLength | The length of source, or -1 if null-terminated. |
| ap | A variable-length argument list containing the arguments |
| parseError | A pointer to UParseError to receive information about errors occurred during parsing. |
| status | A pointer to an UErrorCode to receive any errors specified in pattern. |
| void umsg_applyPattern | ( | UMessageFormat * | fmt, |
| const UChar * | pattern, | ||
| int32_t | patternLength, | ||
| UParseError * | parseError, | ||
| UErrorCode * | status | ||
| ) |
Sets the pattern.
| fmt | The formatter to use |
| pattern | The pattern to be applied. |
| patternLength | Length of the pattern to use |
| parseError | Struct to receive information on position of error if an error is encountered.Can be NULL. |
| status | Output param set to success/failure code on exit. If the pattern is invalid, this will be set to a failure result. |
| int32_t umsg_autoQuoteApostrophe | ( | const UChar * | pattern, |
| int32_t | patternLength, | ||
| UChar * | dest, | ||
| int32_t | destCapacity, | ||
| UErrorCode * | ec | ||
| ) |
Convert an 'apostrophe-friendly' pattern into a standard pattern.
Standard patterns treat all apostrophes as quotes, which is problematic in some languages, e.g. French, where apostrophe is commonly used. This utility assumes that only an unpaired apostrophe immediately before a brace is a true quote. Other unpaired apostrophes are paired, and the resulting standard pattern string is returned.
Note it is not guaranteed that the returned pattern is indeed a valid pattern. The only effect is to convert between patterns having different quoting semantics.
| pattern | the 'apostrophe-friendly' patttern to convert |
| patternLength | the length of pattern, or -1 if unknown and pattern is null-terminated |
| dest | the buffer for the result, or NULL if preflight only |
| destCapacity | the length of the buffer, or 0 if preflighting |
| ec | the error code |
| UMessageFormat umsg_clone | ( | const UMessageFormat * | fmt, |
| UErrorCode * | status | ||
| ) |
| void umsg_close | ( | UMessageFormat * | format | ) |
| int32_t umsg_format | ( | const UMessageFormat * | fmt, |
| UChar * | result, | ||
| int32_t | resultLength, | ||
| UErrorCode * | status, | ||
| ... | |||
| ) |
Format a message for a locale.
This function may perform re-ordering of the arguments depending on the locale. For all numeric arguments, double is assumed unless the type is explicitly integer. All choice format arguments must be of type double.
| fmt | The formatter to use |
| result | A pointer to a buffer to receive the formatted message. |
| resultLength | The maximum size of result. |
| status | A pointer to an UErrorCode to receive any errors |
| ... | A variable-length argument list containing the arguments specified in pattern. |
| const char * umsg_getLocale | ( | const UMessageFormat * | fmt | ) |
| UMessageFormat * umsg_open | ( | const UChar * | pattern, |
| int32_t | patternLength, | ||
| const char * | locale, | ||
| UParseError * | parseError, | ||
| UErrorCode * | status | ||
| ) |
Open a message formatter with given pattern and for the given locale.
| pattern | A pattern specifying the format to use. |
| patternLength | Length of the pattern to use |
| locale | The locale for which the messages are formatted. |
| parseError | A pointer to UParseError struct to receive any errors occured during parsing. Can be NULL. |
| status | A pointer to an UErrorCode to receive any errors. |
| void umsg_parse | ( | const UMessageFormat * | fmt, |
| const UChar * | source, | ||
| int32_t | sourceLength, | ||
| int32_t * | count, | ||
| UErrorCode * | status, | ||
| ... | |||
| ) |
Parse a message.
For numeric arguments, this function will always use doubles. Integer types should not be passed. This function is not able to parse all output from umsg_format.
| fmt | The formatter to use |
| source | The text to parse. |
| sourceLength | The length of source, or -1 if null-terminated. |
| count | Output param to receive number of elements returned. |
| status | A pointer to an UErrorCode to receive any errors |
| ... | A variable-length argument list containing the arguments specified in pattern. |
| void umsg_setLocale | ( | UMessageFormat * | fmt, |
| const char * | locale | ||
| ) |
| int32_t umsg_toPattern | ( | const UMessageFormat * | fmt, |
| UChar * | result, | ||
| int32_t | resultLength, | ||
| UErrorCode * | status | ||
| ) |
Gets the pattern.
| fmt | The formatter to use |
| result | A pointer to a buffer to receive the pattern. |
| resultLength | The maximum size of result. |
| status | Output param set to success/failure code on exit. If the pattern is invalid, this will be set to a failure result. |
| int32_t umsg_vformat | ( | const UMessageFormat * | fmt, |
| UChar * | result, | ||
| int32_t | resultLength, | ||
| va_list | ap, | ||
| UErrorCode * | status | ||
| ) |
Format a message for a locale.
This function may perform re-ordering of the arguments depending on the locale. For all numeric arguments, double is assumed unless the type is explicitly integer. All choice format arguments must be of type double.
| fmt | The formatter to use |
| result | A pointer to a buffer to receive the formatted message. |
| resultLength | The maximum size of result. |
| ap | A variable-length argument list containing the arguments |
| status | A pointer to an UErrorCode to receive any errors specified in pattern. |
| void umsg_vparse | ( | const UMessageFormat * | fmt, |
| const UChar * | source, | ||
| int32_t | sourceLength, | ||
| int32_t * | count, | ||
| va_list | ap, | ||
| UErrorCode * | status | ||
| ) |
Parse a message.
For numeric arguments, this function will always use doubles. Integer types should not be passed. This function is not able to parse all output from umsg_format.
| fmt | The formatter to use |
| source | The text to parse. |
| sourceLength | The length of source, or -1 if null-terminated. |
| count | Output param to receive number of elements returned. |
| ap | A variable-length argument list containing the arguments |
| status | A pointer to an UErrorCode to receive any errors specified in pattern. |