OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 /** | |
6 * A library for general helper code associated with the intl library | |
7 * rather than confined to specific parts of it. | |
8 */ | |
9 | |
10 library intl_helpers; | |
11 | |
12 import 'dart:async'; | |
13 | |
14 /** | |
15 * This is used as a marker for a locale data map that hasn't been initialized, | |
16 * and will throw an exception on any usage that isn't the fallback | |
17 * patterns/symbols provided. | |
18 */ | |
19 class UninitializedLocaleData<F> { | |
20 final String message; | |
21 final F fallbackData; | |
22 const UninitializedLocaleData(this.message, this.fallbackData); | |
23 | |
24 operator [](String key) => | |
25 (key == 'en_US') ? fallbackData : _throwException(); | |
26 | |
27 String lookupMessage(String message_str, [final String desc = '', | |
28 final Map examples = const {}, String locale, String name, | |
29 List<String> args, String meaning]) => message_str; | |
30 | |
31 List get keys => _throwException(); | |
32 | |
33 bool containsKey(String key) => (key == 'en_US') ? true : _throwException(); | |
34 | |
35 _throwException() { | |
36 throw new LocaleDataException("Locale data has not been initialized" | |
37 ", call $message."); | |
38 } | |
39 } | |
40 | |
41 class LocaleDataException implements Exception { | |
42 final String message; | |
43 LocaleDataException(this.message); | |
44 toString() => "LocaleDataException: $message"; | |
45 } | |
46 | |
47 /** | |
48 * An abstract superclass for data readers to keep the type system happy. | |
49 */ | |
50 abstract class LocaleDataReader { | |
51 Future read(String locale); | |
52 } | |
53 | |
54 /** | |
55 * The internal mechanism for looking up messages. We expect this to be set | |
56 * by the implementing package so that we're not dependent on its | |
57 * implementation. | |
58 */ | |
59 var messageLookup = | |
60 const UninitializedLocaleData('initializeMessages(<locale>)', null); | |
61 | |
62 /** | |
63 * Initialize the message lookup mechanism. This is for internal use only. | |
64 * User applications should import `message_lookup_by_library.dart` and call | |
65 * `initializeMessages` | |
66 */ | |
67 void initializeInternalMessageLookup(Function lookupFunction) { | |
68 if (messageLookup is UninitializedLocaleData) { | |
69 messageLookup = lookupFunction(); | |
70 } | |
71 } | |
OLD | NEW |