writeTranslations method

void writeTranslations(
  1. Iterable<TranslatedMessage> usableTranslations,
  2. String locale
)

Write out the translated forms.

Implementation

void writeTranslations(
  Iterable<TranslatedMessage> usableTranslations,
  String locale,
) {
  for (var translation in usableTranslations) {
    // Some messages we generate as methods in this class. Simpler ones
    // we inline in the map from names to messages.
    var messagesThatNeedMethods = translation.originalMessages
        .where(_hasArguments)
        .toSet()
        .toList();
    for (var original in messagesThatNeedMethods) {
      output
        ..write('  ')
        ..write(
          original.toCodeForLocale(locale, _methodNameFor(original.name)),
        )
        ..write('\n\n');
    }
  }
  output.write(messagesDeclaration);

  // Now write the map of names to either the direct translation or to a
  // method.
  var names =
      (usableTranslations
              .expand((translation) => translation.originalMessages)
              .toSet()
              .toList()
            ..sort((a, b) => a.name.compareTo(b.name)))
          .map(
            (original) =>
                "    '${Message.escapeString(original.name)}'"
                ': ${_mapReference(original, locale)}',
          )
          .join(',\n');
  output
    ..write(names)
    ..write('\n  };\n}\n');
}