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

Side by Side Diff: pkg/intl/lib/message_lookup_local.dart

Issue 11783009: Big merge from experimental to bleeding edge. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/intl/lib/intl_standalone.dart ('k') | pkg/intl/lib/src/date_format_internal.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * Message/plural format library with locale support. This can have different 6 * Message/plural format library with locale support. This can have different
7 * implementations based on the mechanism for finding the localized versions 7 * implementations based on the mechanism for finding the localized versions
8 * of messages. This version expects them to be in a library named e.g. 8 * of messages. This version expects them to be in a library named e.g.
9 * 'messages_en_US'. The prefix is set in the [initializeMessages] call, which 9 * 'messages_en_US'. The prefix is set in the [initializeMessages] call, which
10 * must be made for a locale before any lookups can be done. 10 * must be made for a locale before any lookups can be done.
11 * 11 *
12 * See Intl class comment or `tests/message_format_test.dart` for more examples. 12 * See Intl class comment or `tests/message_format_test.dart` for more examples.
13 */ 13 */
14 //TODO(efortuna): documentation example involving the offset parameter? 14 //TODO(efortuna): documentation example involving the offset parameter?
15 15
16 library message_lookup_local; 16 library message_lookup_local;
17 17
18 import 'dart:async';
18 import 'intl.dart'; 19 import 'intl.dart';
19 import 'src/intl_helpers.dart'; 20 import 'src/intl_helpers.dart';
20 import 'dart:mirrors'; 21 import 'dart:mirrors';
21 22
22 /** 23 /**
23 * Initialize the user messages for [localeName]. Note that this is an ASYNC 24 * Initialize the user messages for [localeName]. Note that this is an ASYNC
24 * operation. This must be called before attempting to use messages in 25 * operation. This must be called before attempting to use messages in
25 * [localeName]. 26 * [localeName].
26 */ 27 */
27 Future initializeMessages(localeName, [String source = 'messages_']) { 28 Future initializeMessages(localeName, [String source = 'messages_']) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 * The values of [desc] and [examples] are not used at run-time but are only 82 * The values of [desc] and [examples] are not used at run-time but are only
82 * made available to the translators, so they MUST be simple Strings available 83 * made available to the translators, so they MUST be simple Strings available
83 * at compile time: no String interpolation or concatenation. 84 * at compile time: no String interpolation or concatenation.
84 * The expected usage of this is inside a function that takes as parameters 85 * The expected usage of this is inside a function that takes as parameters
85 * the variables used in the interpolated string. 86 * the variables used in the interpolated string.
86 * 87 *
87 * Ultimately, the information about the enclosing function and its arguments 88 * Ultimately, the information about the enclosing function and its arguments
88 * will be extracted automatically but for the time being it must be passed 89 * will be extracted automatically but for the time being it must be passed
89 * explicitly in the [name] and [args] arguments. 90 * explicitly in the [name] and [args] arguments.
90 */ 91 */
91 String lookupMessage(String message_str, [final String desc='', 92 Future<String> lookupMessage(String message_str, [final String desc='',
92 final Map examples=const {}, String locale, 93 final Map examples=const {}, String locale,
93 String name, List<String> args]) { 94 String name, List<String> args]) {
94 if (name == null) return message_str; 95 if (name == null) return new Future.immediate(message_str);
95 // The translations also make use of Intl.message, so we need to not 96 // The translations also make use of Intl.message, so we need to not
96 // recurse and just stop when we find the first substitution. 97 // recurse and just stop when we find the first substitution.
97 if (_lookupInProgress) return message_str; 98 if (_lookupInProgress) return new Future.immediate(message_str);
98 _lookupInProgress = true; 99 _lookupInProgress = true;
99 var result; 100 var result;
100 try { 101 try {
101 var actualLocale = (locale == null) ? Intl.getCurrentLocale() : locale; 102 var actualLocale = (locale == null) ? Intl.getCurrentLocale() : locale;
102 // For this usage, if the locale doesn't exist for messages, just return 103 // For this usage, if the locale doesn't exist for messages, just return
103 // it and we'll fall back to the original version. 104 // it and we'll fall back to the original version.
104 var verifiedLocale = 105 var verifiedLocale =
105 Intl.verifiedLocale( 106 Intl.verifiedLocale(
106 actualLocale, 107 actualLocale,
107 localeExists, 108 localeExists,
108 onFailure: (locale)=>locale); 109 onFailure: (locale)=>locale);
109 LibraryMirror messagesForThisLocale = 110 LibraryMirror messagesForThisLocale =
110 _libraries['$_sourcePrefix$verifiedLocale']; 111 _libraries['$_sourcePrefix$verifiedLocale'];
111 if (messagesForThisLocale == null) return message_str; 112 if (messagesForThisLocale == null) {
113 return new Future.immediate(message_str);
114 }
112 MethodMirror localized = messagesForThisLocale.functions[name]; 115 MethodMirror localized = messagesForThisLocale.functions[name];
113 if (localized == null) return message_str; 116 if (localized == null) return new Future.immediate(message_str);
114 result = messagesForThisLocale.invoke(localized.simpleName, args); 117 result = messagesForThisLocale.invoke(localized.simpleName, args);
115 } 118 } finally {
116 finally {
117 _lookupInProgress = false; 119 _lookupInProgress = false;
118 } 120 }
119 return result.value.reflectee; 121 return result.then((value) => value.reflectee);
120 } 122 }
121 } 123 }
OLDNEW
« no previous file with comments | « pkg/intl/lib/intl_standalone.dart ('k') | pkg/intl/lib/src/date_format_internal.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698