Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Unified Diff: lib/i18n/intl_message.dart

Issue 10538033: MessageFormat fixup (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/i18n/date_format.dart ('k') | lib/i18n/message_format.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/i18n/intl_message.dart
===================================================================
--- lib/i18n/intl_message.dart (revision 8354)
+++ lib/i18n/intl_message.dart (working copy)
@@ -1,88 +1,74 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
/**
- * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
- * for details. All rights reserved. Use of this source code is governed by a
- * BSD-style license that can be found in the LICENSE file.
- *
* Message/plural format library with locale support.
*
- * Message format grammar:
*
- * messageFormatPattern := string ( "{" messageFormatElement "}" string )*
- * messageFormatElement := argumentIndex [ "," elementFormat ]
- * elementFormat := "plural" "," pluralStyle
- * | "select" "," selectStyle
- * pluralStyle := pluralFormatPattern
- * selectStyle := selectFormatPattern
- * pluralFormatPattern := \\[ "offset" ":" offsetIndex ] pluralForms*
- * selectFormatPattern := pluralForms*
- * pluralForms := stringKey "{" ( "{" messageFormatElement "}"|string )* "}"
+ * _message example:
+ * '''I see ${intl.plural(num_people,
+ * {'0': 'no one at all',
+ * '1': 'one other person',
+ * 'other': '$num_people other people'})} in $place.''''
*
+ * Useage example:
+ * msg(num_people, place) => new IntlMessage(
+ '''I see ${intl.plural(num_people,
+ * {'0': 'no one at all',
+ * '1': 'one other person',
+ * 'other': '$num_people other people'})} in $place.'''',
+ * desc: 'Description of how many people are seen as program start.',
+ * examples: {'num_people': 3, 'place': 'London'});
*
- * Message example:
+ * Calling `msg({'num_people': 2, 'place': 'Athens'});` would
+ * produce "I see 2 other people in Athens." as output.
+ * <!-- TODO(efortuna): documentation example involving the offset parameter.
+ * -->
*
- * I see {NUM_PEOPLE, plural, offset:1
- * =0 {no one at all}
- * =1 {{WHO}}
- * one {{WHO} and one other person}
- * other {{WHO} and # other people}}
- * in {PLACE}.
- *
- * Calling format({'NUM_PEOPLE': 2, 'WHO': 'Mark', 'PLACE': 'Athens'}) would
- * produce "I see Mark and one other person in Athens." as output.
- *
* See tests/message_format_test.dart for more examples.
*/
-#library('MessageFormat');
+#library('intl_message');
-class MessageFormat {
+class IntlMessage {
- /**
- * String that is used to determin the particular case and gender needed to be
- * returned. The format of this string follows the same pattern as in Closure,
- * Java, and C++. This pattern is described at the beginning of this class
- * definition. See tests/message_format_test.dart for more examples.
- */
- final String _messageFunction;
+ /** String describing the use case for this message. */
+ String _messageDescription;
/**
- * String indicating a language code with which the message is to be
- * formatted (such as en-US).
+ * String that contains the message to be displayed. It may contain
+ * placeholders in the form of string interpolated items (ie 'hello$foo') that
+ * will be substituted in to complete the message.
+ * See tests/message_format_test.dart for more examples.
*/
- final String _locale;
+ String _message;
/**
- * Constructor. The constructor expects you do provide annotations in comments
- * above your declaration of this constructor with an @desc describing the
- * context for the useage of the function. You may also specify @ex to specify
- * examples of inputs for each particular argument that the [_messageFunction]
- * accepts. The String [_messageFunction] is used to determine the particular
- * case and gender for the given instance. An optional [_locale] can be
- * provided for specifics of the language locale to be used, otherwise, we
- * will attempt to infer it (acceptable if Dart is running on the client, we
- * can infer from the browser).
+ * String indicating the locale code with which the message is to be
+ * formatted (such as en-CA).
*/
- //TODO(efortuna): _locale is not currently inferred.
- const MessageFormat(this._messageFunction, [this._locale = 'en-US']);
+ String _languageCode;
+ /** Examples of the placeholders used in the message string. */
+ Map _messageExamples;
+
/**
- * Formats a message. By default, we treat '#' with special meaning
- * representing the number (plural_variable - plural_offset). If [ignorePound]
- * is true, then we do not treat '#' as a special character, and it is just
- * treated literally. [namedParameters] is a map of String keys to String or
- * int values to influence the formatting of the message or data in the
- * message. For example, example, in the call to
- * msg_formatter.format({'NUM_PEOPLE': 5, 'NAME': 'Angela'}),
- * object \{'NUM_PEOPLE': 5, 'NAME': 'Angela'\} holds positional parameters.
- * 1st parameter could mean 5 people, which could influence plural format,
- * and 2nd parameter is just relevant data to be printed out in the proper
- * position in the message.
- * Returns the correctly formatted message in the desired language.
+ * Accepts a String [_message] that contains the message (that
+ * will be internationalized). A String [_messageDescription] describes the
+ * use case for this string in the program, and [examples] provides a map of
+ * examples for the items (if any) to be subsituted into [_message].
+ * It also optionally accepts a [_languageCode] to specify the particular
+ * language to return content in (necessary if the Dart code is not running in
+ * a browser). The values of [desc] and [examples] *must* be
+ * simple Strings available at compile time: no String interpolation or
+ * concatenation.
*/
- String format(Map<String, dynamic> messageParameters,
- [bool ignorePound=false]) {
- // TODO(efortuna): actually perform the translation here. For now, I'm just
- // returning a description of the message to be returned.
- return _messageDescription;
+ IntlMessage(this._message, [final String desc='', final Map examples=const {},
+ final String locale='']) {
+ this._messageDescription = desc;
+ this._messageExamples = examples;
+ this._languageCode = locale;
}
+
}
« no previous file with comments | « lib/i18n/date_format.dart ('k') | lib/i18n/message_format.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698