writeCombined method

void writeCombined(
  1. String path
)

Write one combined bundle.json (all locales).

Implementation

void writeCombined(String path) {
  final strings = <String, dynamic>{};
  perLocale.forEach((locale, data) {
    (data['strings'] as Map).forEach((sid, spec) {
      final specMap = spec as Map;
      if (!strings.containsKey(sid)) {
        final meta = <String, dynamic>{
          for (final e in specMap.entries)
            if (![
              'templates',
              'enum_values',
              'cell_hashes',
              'enum_hashes',
              'locale'
            ].contains(e.key))
              e.key: e.value
        };
        strings[sid] = {...meta, 'cells': <String, dynamic>{}};
      }
      (strings[sid]['cells'] as Map)[locale] = {
        'templates': specMap['templates'],
        'enums': specMap['enum_values'],
      };
    });
  });
  final combined = {
    'version': 1,
    'source_locale': sourceLocale,
    'locales': locales,
    if (translation != null) 'translation': translation,
    'strings': strings,
  };
  final f = File(path);
  f.parent.createSync(recursive: true);
  f.writeAsStringSync(
      '${const JsonEncoder.withIndent('  ').convert(combined)}\n');
}