Bundle.fromTsv constructor
Bundle.fromTsv(
- String tsv
Implementation
factory Bundle.fromTsv(String tsv) {
final rows = tsv.split('\n').map((row) => row.trimRight());
final global = rows.takeWhile((row) => row.isNotEmpty);
final messages = rows.skipWhile((row) => row.isNotEmpty).skip(1);
var author = '';
var context = '';
var locale = '';
var lastModified = DateTime.now();
for (final pair in global) {
final key = pair.split('\t').first;
final value = pair.split('\t').elementAtOrElse(1, (index) => '');
switch (key) {
case 'author':
author = value;
break;
case 'context':
context = value;
break;
case 'locale':
locale = value;
break;
case 'last_modified':
lastModified = DateTime.parse(value);
break;
}
}
final items = <BundleItem>{};
final columns = messages.first.split('\t');
final translates = messages.skip(1);
final nameIndex = columns.indexOf('name');
final valueIndex = columns.indexOf('value');
final descriptionIndex = columns.indexOf('description');
final placeholdersIndex = columns.indexOf('placeholders');
final typeIndex = columns.indexOf('type');
for (final translate in translates) {
final values = translate.split('\t');
final placeholders = values[placeholdersIndex]
.replaceAll(RegExp(r'\(|\)|\ '), '')
.split(',');
final map = <String, dynamic>{};
if (placeholders.length > 1) {
map.addAll({for (var element in placeholders) element: {}});
}
items.add(BundleItem(
name: values[nameIndex],
value: values[valueIndex],
description: values[descriptionIndex],
placeholders: map,
type: values[typeIndex],
));
}
return Bundle(
author: author,
context: context,
locale: locale,
lastModified: lastModified,
items: items,
);
}