diff --git a/pkg/intl/CHANGELOG.md b/pkg/intl/CHANGELOG.md index 1085a240238..1b1d25d2f9d 100644 --- a/pkg/intl/CHANGELOG.md +++ b/pkg/intl/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.11.3 + + * Add a --[no]-use-deferred-loading flag to generate_from_arb.dart and + generally make the deferred loading of message libraries optional. + ## 0.11.2 * Missed canonicalization of locales in one place in message library generation. diff --git a/pkg/intl/bin/generate_from_arb.dart b/pkg/intl/bin/generate_from_arb.dart index 6830fc53dc6..ec4bc0f195a 100644 --- a/pkg/intl/bin/generate_from_arb.dart +++ b/pkg/intl/bin/generate_from_arb.dart @@ -40,11 +40,14 @@ main(List args) { callback: (x) => targetDir = x); parser.addOption("generated-file-prefix", defaultsTo: '', callback: (x) => generatedFilePrefix = x); + parser.addFlag("use-deferred-loading", defaultsTo: true, + callback: (x) => useDeferredLoading = x); parser.parse(args); var dartFiles = args.where((x) => x.endsWith("dart")).toList(); var jsonFiles = args.where((x) => x.endsWith(".arb")).toList(); if (dartFiles.length == 0 || jsonFiles.length == 0) { print('Usage: generate_from_arb [--output-dir=]' + ' [--[no-]use-deferred-loading]' ' [--generated-file-prefix=] file1.dart file2.dart ...' ' translation1_.arb translation2.arb ...'); exit(0); diff --git a/pkg/intl/lib/generate_localized.dart b/pkg/intl/lib/generate_localized.dart index 000333168f5..78baaf3b030 100644 --- a/pkg/intl/lib/generate_localized.dart +++ b/pkg/intl/lib/generate_localized.dart @@ -52,6 +52,11 @@ List allLocales = []; */ String generatedFilePrefix = ''; +/** + * Should we use deferred loading for the generated libraries. + */ +bool useDeferredLoading = true; + /** * This represents a message and its translation. We assume that the translation * has some identifier that allows us to figure out the original message it @@ -179,13 +184,18 @@ String generateMainImportFile() { for (var locale in allLocales) { var baseFile = '${generatedFilePrefix}messages_$locale.dart'; var file = importForGeneratedFile(baseFile); - output.write("import '$file' deferred as ${_libraryName(locale)};\n"); + output.write("import '$file' "); + if (useDeferredLoading) output.write("deferred "); + output.write("as ${_libraryName(locale)};\n"); } output.write("\n"); output.write("\nMap _deferredLibraries = {\n"); for (var rawLocale in allLocales) { var locale = Intl.canonicalizedLocale(rawLocale); - output.write(" '$locale' : () => ${_libraryName(locale)}.loadLibrary(),\n"); + var loadOperation = (useDeferredLoading) + ? " '$locale' : () => ${_libraryName(locale)}.loadLibrary(),\n" + : " '$locale' : () => new Future.value(null),\n"; + output.write(loadOperation); } output.write("};\n"); output.write( diff --git a/pkg/intl/pubspec.yaml b/pkg/intl/pubspec.yaml index a38f52cb7fb..f8e4b38c936 100644 --- a/pkg/intl/pubspec.yaml +++ b/pkg/intl/pubspec.yaml @@ -1,5 +1,5 @@ name: intl -version: 0.11.2 +version: 0.11.3 author: Dart Team description: Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues. homepage: http://www.dartlang.org diff --git a/pkg/intl/test/message_extraction/message_extraction_no_deferred_test.dart b/pkg/intl/test/message_extraction/message_extraction_no_deferred_test.dart new file mode 100644 index 00000000000..a46ea7290a8 --- /dev/null +++ b/pkg/intl/test/message_extraction/message_extraction_no_deferred_test.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2014, 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. + +/** + * A test for message extraction and code generation not using deferred + * loading for the generated code. + */ +library message_extraction_no_deferred_test; + +import 'message_extraction_test.dart' as mainTest; + +main(arguments) { + mainTest.useDeferredLoading = false; + mainTest.main(arguments); +} \ No newline at end of file diff --git a/pkg/intl/test/message_extraction/message_extraction_test.dart b/pkg/intl/test/message_extraction/message_extraction_test.dart index 56d2fa39b59..744e107e792 100644 --- a/pkg/intl/test/message_extraction/message_extraction_test.dart +++ b/pkg/intl/test/message_extraction/message_extraction_test.dart @@ -13,6 +13,13 @@ import '../data_directory.dart'; final dart = Platform.executable; +/** Should we use deferred loading. */ +bool useDeferredLoading = true; + +String get _deferredLoadPrefix => useDeferredLoading ? '' : 'no-'; + +String get deferredLoadArg => '--${_deferredLoadPrefix}use-deferred-loading'; + /** The VM arguments we were given, most important package-root. */ final vmArgs = Platform.executableArguments; @@ -145,9 +152,9 @@ Future generateTranslationFiles(ProcessResult previousResult) => Future generateCodeFromTranslation(ProcessResult previousResult) => run(previousResult, [asTestDirPath('../../bin/generate_from_arb.dart'), - '--generated-file-prefix=foo_', 'sample_with_messages.dart', - 'part_of_sample_with_messages.dart', 'translation_fr.arb', - 'translation_de_DE.arb']); + deferredLoadArg, '--generated-file-prefix=foo_', + 'sample_with_messages.dart', 'part_of_sample_with_messages.dart', + 'translation_fr.arb', 'translation_de_DE.arb']); Future runAndVerify(ProcessResult previousResult) => run( previousResult, [asTempDirPath('run_and_verify.dart')]); diff --git a/pkg/intl/test/message_extraction/sample_with_messages.dart b/pkg/intl/test/message_extraction/sample_with_messages.dart index 64bff65bc51..47cfc182f91 100644 --- a/pkg/intl/test/message_extraction/sample_with_messages.dart +++ b/pkg/intl/test/message_extraction/sample_with_messages.dart @@ -227,8 +227,7 @@ main() { // Verify that a translated message isn't initially present. var messageInGerman = Intl.withLocale('de_DE', message1); - test("Locales don't work before they're initialized", () - => expect(messageInGerman, "This is a message")); + expect(messageInGerman, "This is a message"); var f1 = initializeMessages(fr.locale) // Since English has the one message which is always translated, we