Index: pkg/intl/test/message_extraction/generate_from_json.dart |
diff --git a/pkg/intl/test/message_extraction/generate_from_json.dart b/pkg/intl/test/message_extraction/generate_from_json.dart |
index c991a44421e3133ea6948a60e8d8bcd9ca3f1b13..a3478da07b496436ed69d43dd53a1907ddcae9d2 100644 |
--- a/pkg/intl/test/message_extraction/generate_from_json.dart |
+++ b/pkg/intl/test/message_extraction/generate_from_json.dart |
@@ -23,12 +23,13 @@ import 'package:intl/generate_localized.dart'; |
import 'dart:json' as json; |
import 'package:pathos/path.dart' as path; |
import 'package:args/args.dart'; |
+import 'package:serialization/serialization.dart'; |
/** |
* Keeps track of all the messages we have processed so far, keyed by message |
* name. |
*/ |
-Map<String, IntlMessage> messages; |
+Map<String, MainMessage> messages; |
main() { |
var targetDir; |
@@ -41,16 +42,15 @@ main() { |
parser.addOption("generated-file-prefix", defaultsTo: '', |
callback: (x) => generatedFilePrefix = x); |
parser.parse(args); |
- if (args.length == 0) { |
+ var dartFiles = args.where((x) => x.endsWith("dart")).toList(); |
+ var jsonFiles = args.where((x) => x.endsWith(".json")).toList(); |
+ if (dartFiles.length == 0 || jsonFiles.length == 0) { |
print('Usage: generate_from_json [--output-dir=<dir>]' |
' [--generated-file-prefix=<prefix>] file1.dart file2.dart ...' |
' translation1.json translation2.json ...'); |
exit(0); |
} |
- var dartFiles = args.where((x) => x.endsWith("dart")).toList(); |
- var jsonFiles = args.where((x) => x.endsWith(".json")).toList(); |
- |
// We're re-parsing the original files to find the corresponding messages, |
// so if there are warnings extracting the messages, suppress them. |
suppressWarnings = true; |
@@ -70,6 +70,20 @@ main() { |
mainImportFile.writeAsStringSync(generateMainImportFile()); |
} |
+var s = new Serialization(); |
+var format = const SimpleFlatFormat(); |
+var r = s.newReader(format); |
+ |
+recreateIntlObjects(key, value) { |
+ if (value == null) return null; |
+ if (value is String || value is int) return Message.from(value, null); |
+ if (value is List) { |
+ var newThing = r.read(value); |
+ return newThing; |
+ } |
+ throw new FormatException("Invalid input data $value"); |
+} |
+ |
/** |
* Create the file of generated code for a particular locale. We read the json |
* data and create [BasicTranslatedMessage] instances from everything, |
@@ -79,7 +93,8 @@ main() { |
void generateLocaleFile(File file, String targetDir) { |
var src = file.readAsStringSync(); |
var data = json.parse(src); |
- var locale = data["_locale"]; |
+ data.forEach((k, v) => data[k] = recreateIntlObjects(k, v)); |
+ var locale = data["_locale"].string; |
allLocales.add(locale); |
var translations = []; |
@@ -96,13 +111,13 @@ void generateLocaleFile(File file, String targetDir) { |
* up its original message in our [messages]. |
*/ |
class BasicTranslatedMessage extends TranslatedMessage { |
- BasicTranslatedMessage(String name, String translated) : |
+ BasicTranslatedMessage(String name, translated) : |
super(name, translated); |
- IntlMessage get originalMessage => |
+ MainMessage get originalMessage => |
(super.originalMessage == null) ? _findOriginal() : super.originalMessage; |
// We know that our [id] is the name of the message, which is used as the |
//key in [messages]. |
- IntlMessage _findOriginal() => originalMessage = messages[id]; |
+ MainMessage _findOriginal() => originalMessage = messages[id]; |
} |