Parse `arb` files more completely
diff --git a/pkgs/messages_builder/lib/arb_parser.dart b/pkgs/messages_builder/lib/arb_parser.dart
index de115a3..05710ef 100644
--- a/pkgs/messages_builder/lib/arb_parser.dart
+++ b/pkgs/messages_builder/lib/arb_parser.dart
@@ -12,12 +12,17 @@
MessageListWithMetadata parseMessageFile(Map<String, dynamic> arb) {
final locale = arb['@@locale'] as String?;
final context = arb['@@context'] as String?;
- final isReference = (arb['@@x-reference'] as bool?) ?? false;
+ final templatePath = arb['@@x-template'] as String?;
final messages = arb.keys
.where((key) => !key.startsWith('@'))
.map((key) => parseMessage(arb, key, '${context}_$locale'))
.toList();
- return MessageListWithMetadata(messages, locale, context, isReference);
+ return MessageListWithMetadata(
+ messages,
+ locale,
+ context,
+ templatePath == null,
+ );
}
MessageWithMetadata parseMessage(
@@ -35,6 +40,7 @@
final messageMetadata = arb['@$messageKey'];
if (messageMetadata != null) {
final metadata = messageMetadata as Map<String, dynamic>;
+ final description = metadata['description'] as String?;
final placeholdersMap = metadata['placeholders'] as Map<String, dynamic>?;
final placeholders = placeholdersMap ?? <String, dynamic>{};
final placeholdersWithMetadata = parsePlaceholderMetadata(placeholders);
@@ -45,6 +51,7 @@
orElse: () => placeholder,
))
.toList();
+ message.description = description;
}
return message;
}
@@ -57,7 +64,12 @@
final placeholderName = entry.key;
final placeholderData = entry.value as Map<String, dynamic>;
final type = (placeholderData['type'] as String?) ?? 'String';
- placeholderTypes.add(Placeholder(placeholderName, type));
+ final example = placeholderData['example'] as String?;
+ placeholderTypes.add(Placeholder(
+ name: placeholderName,
+ type: type,
+ example: example,
+ ));
}
return placeholderTypes;
}
diff --git a/pkgs/messages_builder/lib/builder.dart b/pkgs/messages_builder/lib/builder.dart
index b878c5c..ab28971 100644
--- a/pkgs/messages_builder/lib/builder.dart
+++ b/pkgs/messages_builder/lib/builder.dart
@@ -117,15 +117,15 @@
for (var context in contexts) {
final filesWithContext = arbFiles.where((arb) => arb.context == context);
if (filesWithContext
- .where((element) => element.isReferenceForContext)
+ .where((element) => element.isTemplateResource)
.length >
1) {
- throw ArgumentError('Multiple arb files are marked as reference');
+ throw ArgumentError('Multiple arb files are marked as templates.');
}
final localesInContext = filesWithContext.map((e) => e.locale).toList();
if (localesInContext.length != localesInContext.toSet().length) {
throw ArgumentError(
- 'Multiple arb files for the same context have the same locale');
+ 'Multiple arb files for the same context have the same locale.');
}
}
}
@@ -151,7 +151,7 @@
.length ==
1;
final shouldGenerateDartLib =
- arb.isReferenceForContext || isOnlyResourceForContext;
+ arb.isTemplateResource || isOnlyResourceForContext;
return shouldGenerateDartLib;
}
@@ -199,7 +199,7 @@
MessageFileResource(this.assetId, this.messageList, this.hash);
String get locale => messageList.locale!;
- bool get isReferenceForContext => messageList.isReference;
+ bool get isTemplateResource => messageList.isTemplate;
List<MessageWithMetadata> get messages => messageList.messages;
String? get context => messageList.context;
}
diff --git a/pkgs/messages_builder/lib/message_with_metadata.dart b/pkgs/messages_builder/lib/message_with_metadata.dart
index 4fc02b0..229600d 100644
--- a/pkgs/messages_builder/lib/message_with_metadata.dart
+++ b/pkgs/messages_builder/lib/message_with_metadata.dart
@@ -8,30 +8,33 @@
final Message message;
final String? name;
List<Placeholder> placeholders;
+ String? description;
MessageWithMetadata(this.message, List<String> arguments, this.name)
- : placeholders = arguments.map(Placeholder.new).toList();
+ : placeholders =
+ arguments.map((argument) => Placeholder(name: argument)).toList();
}
class MessageListWithMetadata {
final List<MessageWithMetadata> messages;
final String? locale;
final String? context;
- final bool isReference;
+ final bool isTemplate;
MessageListWithMetadata(
this.messages,
this.locale,
this.context,
- this.isReference,
+ this.isTemplate,
);
}
class Placeholder {
final String name;
final String type;
+ final String? example;
- Placeholder(this.name, [this.type = 'String']);
+ Placeholder({required this.name, this.type = 'String', this.example});
@override
String toString() {
diff --git a/pkgs/messages_builder/test/testdata/testarb.arb.dart b/pkgs/messages_builder/test/testdata/testarb.arb.dart
index 1f765bc..9f6d61e 100644
--- a/pkgs/messages_builder/test/testdata/testarb.arb.dart
+++ b/pkgs/messages_builder/test/testdata/testarb.arb.dart
@@ -5,7 +5,6 @@
String arbFile = '''
{
"@@locale": "en",
- "@@x-reference": true,
"helloAndWelcome": "Welcome {firstName} von {lastName} <",
"@helloAndWelcome": {
"description": "Initial welcome message",