diff --git a/examples/ui/localized_mod/lib/localization/messages_all.dart b/examples/ui/localized_mod/lib/localization/messages_all.dart
old mode 100644
new mode 100755
index a91b228..ec428cb
--- a/examples/ui/localized_mod/lib/localization/messages_all.dart
+++ b/examples/ui/localized_mod/lib/localization/messages_all.dart
@@ -9,21 +9,33 @@
 // ignore: implementation_imports
 import 'package:intl/src/intl_helpers.dart';
 
-import 'messages_messages.dart' deferred as messages_messages;
-import 'messages_he.dart' deferred as messages_he;
+import 'messages_ar-XB.dart' deferred as messages_ar_xb;
+import 'messages_en-XA.dart' deferred as messages_en_xa;
+import 'messages_en-XC.dart' deferred as messages_en_xc;
+import 'messages_sr-Latn.dart' deferred as messages_sr_latn;
+import 'messages_sr.dart' deferred as messages_sr;
 
 typedef Future<dynamic> LibraryLoader();
 Map<String, LibraryLoader> _deferredLibraries = {
-  'messages': () => messages_messages.loadLibrary(),
-  'he': () => messages_he.loadLibrary(),
+  'ar_XB': messages_ar_xb.loadLibrary,
+  'en_XA': messages_en_xa.loadLibrary,
+  'en_XC': messages_en_xc.loadLibrary,
+  'sr_Latn': messages_sr_latn.loadLibrary,
+  'sr': messages_sr.loadLibrary,
 };
 
 MessageLookupByLibrary _findExact(localeName) {
   switch (localeName) {
-    case 'messages':
-      return messages_messages.messages;
-    case 'he':
-      return messages_he.messages;
+    case 'ar_XB':
+      return messages_ar_xb.messages;
+    case 'en_XA':
+      return messages_en_xa.messages;
+    case 'en_XC':
+      return messages_en_xc.messages;
+    case 'sr_Latn':
+      return messages_sr_latn.messages;
+    case 'sr':
+      return messages_sr.messages;
     default:
       return null;
   }
@@ -32,21 +44,20 @@
 /// User programs should call this before using [localeName] for messages.
 Future<bool> initializeMessages(String localeName) async {
   var availableLocale = Intl.verifiedLocale(
-    localeName,
-    (locale) => _deferredLibraries[locale] != null,
-    onFailure: (_) => null);
+      localeName, (locale) => _deferredLibraries[locale] != null,
+      onFailure: (_) => null);
   if (availableLocale == null) {
     // ignore: unnecessary_new
-    return Future.value(false);
+    return new Future.value(false);
   }
   var lib = _deferredLibraries[availableLocale];
   // ignore: unnecessary_new
-  await (lib == null ? Future.value(false) : lib());
+  await (lib == null ? new Future.value(false) : lib());
   // ignore: unnecessary_new
-  initializeInternalMessageLookup(() => CompositeMessageLookup());
+  initializeInternalMessageLookup(() => new CompositeMessageLookup());
   messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor);
   // ignore: unnecessary_new
-  return Future.value(true);
+  return new Future.value(true);
 }
 
 bool _messagesExistFor(String locale) {
@@ -58,8 +69,67 @@
 }
 
 MessageLookupByLibrary _findGeneratedMessagesFor(locale) {
-  var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor,
-      onFailure: (_) => null);
+  var actualLocale =
+      Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null);
   if (actualLocale == null) return null;
   return _findExact(actualLocale);
 }
+
+/// Turn the JSON template into a string.
+///
+/// We expect one of the following forms for the template.
+/// * null -> null
+/// * String s -> s
+/// * int n -> '${args[n]}'
+/// * List list, one of
+///   * ['Intl.plural', int howMany, (templates for zero, one, ...)]
+///   * ['Intl.gender', String gender, (templates for female, male, other)]
+///   * ['Intl.select', String choice, { 'case' : template, ...} ]
+///   * ['text alternating with ', 0 , ' indexes in the argument list']
+String evaluateJsonTemplate(Object input, List<dynamic> args) {
+  if (input == null) return null;
+  if (input is String) return input;
+  if (input is int) {
+    return "${args[input]}";
+  }
+
+  List<dynamic> template = input;
+  var messageName = template.first;
+  if (messageName == "Intl.plural") {
+    var howMany = args[template[1]];
+    return evaluateJsonTemplate(
+        Intl.pluralLogic(howMany,
+            zero: template[2],
+            one: template[3],
+            two: template[4],
+            few: template[5],
+            many: template[6],
+            other: template[7]),
+        args);
+  }
+  if (messageName == "Intl.gender") {
+    var gender = args[template[1]];
+    return evaluateJsonTemplate(
+        Intl.genderLogic(gender,
+            female: template[2], male: template[3], other: template[4]),
+        args);
+  }
+  if (messageName == "Intl.select") {
+    var select = args[template[1]];
+    var choices = template[2];
+    return evaluateJsonTemplate(Intl.selectLogic(select, choices), args);
+  }
+
+  // If we get this far, then we are a basic interpolation, just strings and
+  // ints.
+  // ignore: unnecessary_new
+  var output = new StringBuffer();
+  for (var entry in template) {
+    if (entry is int) {
+      output.write("${args[entry]}");
+    } else {
+      output.write("$entry");
+    }
+  }
+  return output.toString();
+}
diff --git a/examples/ui/localized_mod/lib/localization/messages_ar-XB.dart b/examples/ui/localized_mod/lib/localization/messages_ar-XB.dart
new file mode 100755
index 0000000..2945433
--- /dev/null
+++ b/examples/ui/localized_mod/lib/localization/messages_ar-XB.dart
@@ -0,0 +1,34 @@
+// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
+// This is a library that provides messages for a ar_XB locale. All the
+// messages from the main program should be duplicated here with the same
+// function name.
+
+// ignore_for_file: unnecessary_brace_in_string_interps
+
+import 'package:intl/intl.dart';
+import 'package:intl/message_lookup_by_library.dart';
+import 'dart:convert';
+import 'messages_all.dart' show evaluateJsonTemplate;
+
+// ignore: unnecessary_new
+final messages = new MessageLookup();
+
+// ignore: unused_element
+final _keepAnalysisHappy = Intl.defaultLocale;
+
+// ignore: non_constant_identifier_names
+typedef MessageIfAbsent(String message_str, List<dynamic> args);
+
+class MessageLookup extends MessageLookupByLibrary {
+  get localeName => 'ar_XB';
+
+  String evaluateMessage(translation, List<dynamic> args) {
+    return evaluateJsonTemplate(translation, args);
+  }
+
+  var _messages;
+  // ignore: unnecessary_new
+  get messages => _messages ??= new JsonDecoder().convert(messageText);
+  static final messageText = r'''
+{"appTitle":"‏‮Localized‬‏ ‏‮Mod‬‏","bodyText":["Intl.plural",0,"‏‮There‬‏ ‏‮are‬‏ ‏‮no‬‏ ‏‮messages‬‏.","‏‮There‬‏ ‏‮is‬‏ ‏‮one‬‏ ‏‮message‬‏.",["‏‮There‬‏ ‏‮are‬‏ ",0," ‏‮messages‬‏."],["‏‮There‬‏ ‏‮are‬‏ ",0," ‏‮messages‬‏."],["‏‮There‬‏ ‏‮are‬‏ ",0," ‏‮messages‬‏."],["‏‮There‬‏ ‏‮are‬‏ ",0," ‏‮messages‬‏."]],"footer":"‏‮Coming‬‏ ‏‮soon‬‏: ‏‮actually‬‏ ‏‮reading‬‏ ‏‮those‬‏ ‏‮messages‬‏!"}''';
+}
diff --git a/examples/ui/localized_mod/lib/localization/messages_en-XA.dart b/examples/ui/localized_mod/lib/localization/messages_en-XA.dart
new file mode 100755
index 0000000..fdd77f1
--- /dev/null
+++ b/examples/ui/localized_mod/lib/localization/messages_en-XA.dart
@@ -0,0 +1,34 @@
+// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
+// This is a library that provides messages for a en_XA locale. All the
+// messages from the main program should be duplicated here with the same
+// function name.
+
+// ignore_for_file: unnecessary_brace_in_string_interps
+
+import 'package:intl/intl.dart';
+import 'package:intl/message_lookup_by_library.dart';
+import 'dart:convert';
+import 'messages_all.dart' show evaluateJsonTemplate;
+
+// ignore: unnecessary_new
+final messages = new MessageLookup();
+
+// ignore: unused_element
+final _keepAnalysisHappy = Intl.defaultLocale;
+
+// ignore: non_constant_identifier_names
+typedef MessageIfAbsent(String message_str, List<dynamic> args);
+
+class MessageLookup extends MessageLookupByLibrary {
+  get localeName => 'en_XA';
+
+  String evaluateMessage(translation, List<dynamic> args) {
+    return evaluateJsonTemplate(translation, args);
+  }
+
+  var _messages;
+  // ignore: unnecessary_new
+  get messages => _messages ??= new JsonDecoder().convert(messageText);
+  static final messageText = r'''
+{"appTitle":"[Ļöçåļîžéð Möð one two]","bodyText":["Intl.plural",0,"[Ţĥéŕé åŕé ñö méššåĝéš. one two three four five]","[Ţĥéŕé îš öñé méššåĝé. one two three four five]",null,null,null,["[Ţĥéŕé åŕé ᐅ",0,"ᐊ méššåĝéš. one two three four five]"]],"footer":"[Çömîñĝ šööñ: åçţûåļļý ŕéåðîñĝ ţĥöšé méššåĝéš¡ one two three four five six seven eight nine]"}''';
+}
diff --git a/examples/ui/localized_mod/lib/localization/messages_en-XC.dart b/examples/ui/localized_mod/lib/localization/messages_en-XC.dart
new file mode 100755
index 0000000..dd7a49f
--- /dev/null
+++ b/examples/ui/localized_mod/lib/localization/messages_en-XC.dart
@@ -0,0 +1,34 @@
+// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
+// This is a library that provides messages for a en_XC locale. All the
+// messages from the main program should be duplicated here with the same
+// function name.
+
+// ignore_for_file: unnecessary_brace_in_string_interps
+
+import 'package:intl/intl.dart';
+import 'package:intl/message_lookup_by_library.dart';
+import 'dart:convert';
+import 'messages_all.dart' show evaluateJsonTemplate;
+
+// ignore: unnecessary_new
+final messages = new MessageLookup();
+
+// ignore: unused_element
+final _keepAnalysisHappy = Intl.defaultLocale;
+
+// ignore: non_constant_identifier_names
+typedef MessageIfAbsent(String message_str, List<dynamic> args);
+
+class MessageLookup extends MessageLookupByLibrary {
+  get localeName => 'en_XC';
+
+  String evaluateMessage(translation, List<dynamic> args) {
+    return evaluateJsonTemplate(translation, args);
+  }
+
+  var _messages;
+  // ignore: unnecessary_new
+  get messages => _messages ??= new JsonDecoder().convert(messageText);
+  static final messageText = r'''
+{"appTitle":"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎Localized Mod‎‏‎‎‏‎","bodyText":["Intl.plural",0,"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎There are no messages.‎‏‎‎‏‎","‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎There is one message.‎‏‎‎‏‎",null,null,null,["‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎There are ‎‏‎‎‏‏‎",0,"‎‏‎‎‏‏‏‎ messages.‎‏‎‎‏‎"]],"footer":"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎Coming soon: actually reading those messages!‎‏‎‎‏‎"}''';
+}
diff --git a/examples/ui/localized_mod/lib/localization/messages_messages.dart b/examples/ui/localized_mod/lib/localization/messages_messages.dart
deleted file mode 100644
index c2d2c2c..0000000
--- a/examples/ui/localized_mod/lib/localization/messages_messages.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
-// This is a library that provides messages for a messages locale. All the
-// messages from the main program should be duplicated here with the same
-// function name.
-
-import 'package:intl/intl.dart';
-import 'package:intl/message_lookup_by_library.dart';
-
-// ignore: unnecessary_new
-final messages = MessageLookup();
-
-// ignore: unused_element
-final _keepAnalysisHappy = Intl.defaultLocale;
-
-// ignore: non_constant_identifier_names
-typedef MessageIfAbsent(String message_str, List args);
-
-class MessageLookup extends MessageLookupByLibrary {
-  get localeName => 'messages';
-
-  static m0(itemCount) => "${Intl.plural(itemCount, zero: 'There are no messages.', one: 'There is one message.', other: 'There are ${itemCount} messages.')}";
-
-  final messages = _notInlinedMessages(_notInlinedMessages);
-  static _notInlinedMessages(_) => <String, Function> {
-    "appTitle" : MessageLookupByLibrary.simpleMessage("Localized Mod"),
-    "bodyText" : m0,
-    "footer" : MessageLookupByLibrary.simpleMessage("Coming soon: actually reading those messages!")
-  };
-}
diff --git a/examples/ui/localized_mod/lib/localization/messages_sr-Latn.dart b/examples/ui/localized_mod/lib/localization/messages_sr-Latn.dart
new file mode 100755
index 0000000..8e0d562
--- /dev/null
+++ b/examples/ui/localized_mod/lib/localization/messages_sr-Latn.dart
@@ -0,0 +1,34 @@
+// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
+// This is a library that provides messages for a sr_Latn locale. All the
+// messages from the main program should be duplicated here with the same
+// function name.
+
+// ignore_for_file: unnecessary_brace_in_string_interps
+
+import 'package:intl/intl.dart';
+import 'package:intl/message_lookup_by_library.dart';
+import 'dart:convert';
+import 'messages_all.dart' show evaluateJsonTemplate;
+
+// ignore: unnecessary_new
+final messages = new MessageLookup();
+
+// ignore: unused_element
+final _keepAnalysisHappy = Intl.defaultLocale;
+
+// ignore: non_constant_identifier_names
+typedef MessageIfAbsent(String message_str, List<dynamic> args);
+
+class MessageLookup extends MessageLookupByLibrary {
+  get localeName => 'sr_Latn';
+
+  String evaluateMessage(translation, List<dynamic> args) {
+    return evaluateJsonTemplate(translation, args);
+  }
+
+  var _messages;
+  // ignore: unnecessary_new
+  get messages => _messages ??= new JsonDecoder().convert(messageText);
+  static final messageText = r'''
+{"appTitle":"Lokalizovani mod","bodyText":["Intl.plural",0,"Nema poruka.","Jedna poruka.",null,[0," poruke."],null,[0," poruka."]],"footer":"Dolazi uskoro: zapravo čitanje ovih poruka!"}''';
+}
diff --git a/examples/ui/localized_mod/lib/localization/messages_sr.dart b/examples/ui/localized_mod/lib/localization/messages_sr.dart
new file mode 100755
index 0000000..c7aa735
--- /dev/null
+++ b/examples/ui/localized_mod/lib/localization/messages_sr.dart
@@ -0,0 +1,34 @@
+// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
+// This is a library that provides messages for a sr locale. All the
+// messages from the main program should be duplicated here with the same
+// function name.
+
+// ignore_for_file: unnecessary_brace_in_string_interps
+
+import 'package:intl/intl.dart';
+import 'package:intl/message_lookup_by_library.dart';
+import 'dart:convert';
+import 'messages_all.dart' show evaluateJsonTemplate;
+
+// ignore: unnecessary_new
+final messages = new MessageLookup();
+
+// ignore: unused_element
+final _keepAnalysisHappy = Intl.defaultLocale;
+
+// ignore: non_constant_identifier_names
+typedef MessageIfAbsent(String message_str, List<dynamic> args);
+
+class MessageLookup extends MessageLookupByLibrary {
+  get localeName => 'sr';
+
+  String evaluateMessage(translation, List<dynamic> args) {
+    return evaluateJsonTemplate(translation, args);
+  }
+
+  var _messages;
+  // ignore: unnecessary_new
+  get messages => _messages ??= new JsonDecoder().convert(messageText);
+  static final messageText = r'''
+{"appTitle":"Локализовани мод","bodyText":["Intl.plural",0,"Нема порука.","Једна порука.",null,[0," поруке."],null,[0," порука."]],"footer":"Долази ускоро: заправо читање ових порука!"}''';
+}
