/// creates a file with l10n translations from string import 'dart:convert'; import 'dart:io'; import 'migrate_lemmy_l10n.dart'; const baseFile = 'intl_en.arb'; const autoGenHeader = '// FILE GENERATED AUTOMATICALLY, TO NOT EDIT BY HAND'; Future main(List args) async { final strings = jsonDecode(await File('$outDir/$baseFile').readAsString()) as Map; final keys = strings.keys.where((key) => !key.startsWith('@')).toSet(); final keysWithoutVariables = keys.where((key) { final metadata = strings['@$key'] as Map; final placeholders = metadata['placeholders'] as Map?; return placeholders?.isEmpty ?? true; }).toSet(); await File('lib/l10n/l10n_from_string.dart').writeAsString('''$autoGenHeader // ignore_for_file: constant_identifier_names import 'package:flutter/material.dart'; import 'gen/l10n.dart'; abstract class L10nStrings { ${keys.map((key) => " static const $key = '$key';").join('\n')} } extension L10nFromString on String { String tr(BuildContext context) { switch (this) { ${keysWithoutVariables.map((key) => " case L10nStrings.$key:\n return L10n.of(context).$key;").join('\n')} default: return this; } } } '''); await Process.run('flutter', ['format', '.']); }